Android:如何正确设置AlertDialog中列表项的文本颜色

我的应用程序中有一个AlertDialog 。 它包含一个使用TextView小部件的自定义视图列表。 一切工作正常在Android 2.x. AlertDialog是用白名单和黑色文本创建的。 但是当我在Android 3.x设备上运行我的应用时,所有的TextView都是黑色的,列表的背景也是黑色的。 所以我不能看到文字,直到我点击并按住其中一个项目。

以下是布局文件中的TextView定义:

<TextView
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:textAppearance="?android:attr/textAppearanceSmallInverse" />

我认为使用textAppearanceSmallInverse作为textAppearance属性是设置文本参数的正确方法,它必须适用于所有设备,但似乎我错了。 那么我应该怎么做才能在所有平台上正确显示AlertDialog列表项? 提前致谢。


解决方案是利用Android的内置资源选择系统。 您应该指定两种不同的样式,并根据API版本将它们放在适当的文件夹中。 请注意,以下示例不是我的,我从本教程中获取了它们。

res/values-v4/styles.xml

<resources>

<!-- Text for listboxes, inverted for Andorid prior to 3.0 -->

<style name="MyListTextAppearanceSmall">
    <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
</style>

<style name="MyListTextAppearanceDefault">
    <item name="android:textAppearance">?android:attr/textAppearanceInverse</item>
</style>

<style name="MyListTextAppearanceMedium">
    <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
</style>
</resources>

res/values-v11/styles.xml

<resources>
    <!-- Text for listboxes, non-inverted starting with Android 3.0 -->

    <style name="MyListTextAppearanceSmall">
        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
    </style>

    <style name="MyListTextAppearanceDefault">
        <item name="android:textAppearance">?android:attr/textAppearance</item>
    </style>

    <style name="MyListTextAppearanceMedium">
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
    </style>
</resources>

然后,在你的TextView ,像这样指定样式:

<TextView
    android:style="@style/MyListTextAppearanceSmall"
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:ellipsize="marquee" />

有关更详细的解释,请参阅上面链接的教程。


您的弹出式对话框的代码应如下所示:

// Sets dialog for popup dialog list
AlertDialog dialog;
String[] items = {"exampleItem"};
ListAdapter itemlist = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setAdapter(itemlist, new DialogInterface.OnClickListener()
{
    public void onClick(DialogInterface dialog, int item)
    {
    }
});
dialog = builder.create();
dialog.getListView().setBackgroundColor(Color.WHITE);

在这里,你正在获得listview并将背景颜色设置为白色。 如果要更改每个文本视图的文本颜色,则需要在textview布局中定义它们的颜色,在这种情况下为黑色:

android:textColor="#000000"

被接受的答案似乎有些过火。 我只是通过调用以下方法强制反转背景:

dialogBuilder.setInverseBackgroundForced(true);

解决问题就好了。

链接地址: http://www.djcxy.com/p/53597.html

上一篇: Android: How to set text color for list items in AlertDialog properly

下一篇: How to get JSON data in chunks to report on progress?