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

Android Dialog 中 ListView 文字顯示為黑色背景黑色字的解決方法

     編輯:程式設計綜合問答

在 Android 對話框中直接使用 ListView 並設置 ArrayAdapter 時,若對話框主題為深色,列表項文字可能變為黑色導致在深色背景上不可見。

問題代碼

Dialog dialog = new Dialog(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("選擇模式");

ListView modeList = new ListView(this);
String[] items = {"明亮模式", "普通模式"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(
    this, 
    android.R.layout.simple_list_item_1, 
    android.R.id.text1, 
    items
);
modeList.setAdapter(adapter);
// ... 設置到對話框

原因分析

  • 系統預設佈局 android.R.layout.simple_list_item_1 的 TextView 文字顏色受主題影響
  • 對話框使用深色主題時,文字可能被設置為白色,但某些情況下(如自訂 Dialog 而非 AlertDialog)主題不一致導致黑字黑底
  • AlertDialog.Builder 會自動處理主題適配,直接 new Dialog() 則不會

解決方案

方案一:使用 AlertDialog.Builder 內建單選列表(最簡單)

new AlertDialog.Builder(this)
    .setTitle("選擇模式")
    .setSingleChoiceItems(items, -1, (dialog, which) -> {
        // 處理選擇
        dialog.dismiss();
    })
    .show();

方案二:自訂 Adapter 設置文字顏色

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    this, 
    android.R.layout.simple_list_item_1, 
    android.R.id.text1, 
    items
) {
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView textView = view.findViewById(android.R.id.text1);
        if (textView != null) {
            textView.setTextColor(Color.BLACK); // 或 Color.WHITE 視背景而定
            // 也可設置背景
            // view.setBackgroundColor(Color.WHITE);
        }
        return view;
    }
};

方案三:使用自訂佈局項

res/layout/dialog_list_item.xml:

<TextView xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:textColor="#000000"
    android:textSize="16sp"
    android:background="#FFFFFF" />

使用:

ArrayAdapter<String> adapter = new ArrayAdapter<>(
    this, R.layout.dialog_list_item, R.id.text1, items);

方案四:設置對話框主題(適用於 AlertDialog)

new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)
    .setTitle("標題")
    .setAdapter(adapter, listener)
    .show();

最佳實踐建議

  1. 優先使用 AlertDialog.Builder 而非手動構建 Dialog + ListView
  2. 列表選擇場景直接用 setSingleChoiceItems 或 setItems
  3. 自訂外觀時提供完整佈局資源,不依賴系統預設佈局
  4. 測試深色/淺色主題、日夜模式切換下的顯示效果
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved