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