ListView 滑動時,項目背景變黑且覆蓋文字,靜止後恢復正常。
ListView 為了滑動效能,預設使用**快取繪製** (cache),預設快取背景色為黑色 (#FF000000)。當項目背景為透明或淺色時,滑動過程中會顯示黑色快取背景。
// 程式碼
ListView listView = findViewById(R.id.list_view);
listView.setCacheColorHint(Color.TRANSPARENT); // 或 0x00000000
| 屬性值 | 效果 |
|---|---|
#00000000 / Color.TRANSPARENT | 快取背景透明,**最通用解決方案** |
#FFFFFFFF (白色) | 快取背景白色,適用於項目背景為白色 |
#FF000000 (黑色,預設) | 導致滑動時顯示黑色背景 |
| 項目背景色相同值 | 若所有項目背景固定為某色,可設定為該色 |
// 若項目背景多樣,強制關閉快取 (效能稍降)
listView.setDrawingCacheEnabled(false);
// 或針對特定項目類型
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = inflater.inflate(R.layout.item, parent, false);
// 關鍵:設定項目本身背景色,而非依賴快取
view.setBackgroundColor(getItemBackgroundColor(position));
}
return view;
}
RecyclerView 使用更先進的 ItemAnimator 和佈局機制,**不依賴 cacheColorHint**,預設無滑動背景問題。
android:cacheColorHint=\"#00000000\" 或 setCacheColorHint(Color.TRANSPARENT)