首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ListView 滑動時背景變黑:設定 cacheColorHint 解決

     編輯:程式設計綜合問答

問題現象

ListView 滑動時,項目背景變黑且覆蓋文字,靜止後恢復正常。

原因

ListView 為了滑動效能,預設使用**快取繪製** (cache),預設快取背景色為黑色 (#FF000000)。當項目背景為透明或淺色時,滑動過程中會顯示黑色快取背景。

解決方案:設定 cacheColorHint



  

// 程式碼
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 無此問題

RecyclerView 使用更先進的 ItemAnimator 和佈局機制,**不依賴 cacheColorHint**,預設無滑動背景問題。



總結

  1. ListView 滑動黑背景:設定 android:cacheColorHint=\"#00000000\" 或 setCacheColorHint(Color.TRANSPARENT)
  2. 原理:快取繪製預設黑色背景,透明化即可解決
  3. 新專案用 RecyclerView:根本避免此問題,效能更好、功能更豐富
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved