Android ListView文本颜色

我想将ListView textColor设置为黑色,因为我使用的是白色背景。

这是我的MailActivity

public class MailActivity extends ListActivity { String[] listItems = { "Compose", "Inbox", "Drafts", "Sent" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mails); setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, listItems)); } } 

和我的XML

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Empty set" android:textColor="#000000" /> </LinearLayout> 

我得到的背景是白色的,但不知道在哪里把前景设置为黑色。 我试过在XML中,看起来没有帮助。

好的,这里有一些你应该清楚的事情:

  1. 您在xml文件中设置的背景颜色是您正在尝试定义的活动,而不是您正在定义的ListItems。
  2. 每个列表项都有自己的布局文件,如果您使用复杂的列表项目布局,则应该传递或填充它。

我将尝试用代码示例来解释这个问题:

****让我们开始ListItems布局** :将其保存在您的Android项目的res/layout文件夹中,并使用say ** list_black_text.xml

 <?xml version="1.0" encoding="utf-8"?> <!-- Definig a container for you List Item--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center_vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- Defining where should text be placed. You set you text color here--> <TextView android:id="@+id/list_content" android:textColor="#000000" android:gravity="center" android:text="sample" android:layout_margin="4dip" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

那么,一个简单的布局与TextView是精确的。 你必须有一个ID分配给TextView才能使用它。

现在来看你的屏幕/活动/首席布局,正如我所说的,你正在使用android:background属性定义你的屏幕的android:background 。 我看到你已经在那里定义了一个TextView,我怀疑你正试图在那里定义内容/列表项目,这根本不需要。

这是你的编辑布局:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE --> </LinearLayout> 

最后,最重要的是,设置你的适配器。

 setListAdapter(new ArrayAdapter<String>( this, R.layout.list_black_text, R.id.list_content, listItems)); 

注意我们传递给适配器R.layout.list_black_text的布局资源,以及我们声明的TextView ID R.id.list_content 。 我也改变了ArrayAdapterstringtypes,因为它是通用的。

我希望这可以解释一切。 如果您同意,请接受我的回答。

凌乱,但一个很好的快速修复方法
如果你不想进行复杂的布局定义等,你也可以做一个快速的修复。

虽然实例化适配器声明一个内部类来做到这一点,这里是代码示例:

  ArrayAdapter<String> adapter=new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, listItems){ @Override public View getView(int position, View convertView, ViewGroup parent) { View view =super.getView(position, convertView, parent); TextView textView=(TextView) view.findViewById(android.R.id.text1); /*YOUR CHOICE OF COLOR*/ textView.setTextColor(Color.BLUE); return view; } }; /*SET THE ADAPTER TO LISTVIEW*/ setListAdapter(adapter); 
  1. 创build一个样式文件,例如: my_styles.xml并将其保存在res/values
  2. 添加下面的代码:

     <?xml version="1.0" encoding="utf-8"?> <resources> <style name="ListFont" parent="@android:style/Widget.ListView"> <item name="android:textColor">#FF0000</item> <item name="android:typeface">sans</item> </style> </resources> 
  3. 将您的样式添加到您的AndroidManifest.xml中的Activity定义中,作为android:theme属性,并将值赋给您创build的样式的名称。 例如:

     <activity android:name="your.activityClass" android:theme="@style/ListFont"> 

注意: Widget.ListView来自这里 。 也检查这一点 。

我克隆了simple_list_item_1 (Alt + Click)并将该副本放置在res/layout文件夹中,并将其重命名为list_white_text.xml ,其内容如下:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:textColor="@color/abc_primary_text_material_dark" android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

android:textColor="@color/abc_primary_text_material_dark"在我的设备上转换为白色。

那么在java代码中:

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList); 

您必须在布局* simple_list_item_1 *中定义文本颜色,以定义每个项目的布局。

您设置LinearLayout而不是ListView的背景颜色。 LinearLayout的子项的背景颜色在默认情况下是透明的(在大多数情况下)。

并且您设置不属于您的ListView的TextView的黑色文本颜色。 这是一个自己的项目(LinearLayout的子项目)。

从不使用getApplicationContext() 。 只要使用您的活动作为上下文。 看看是否有帮助。

请检查这里: CommonsWare的答案

你可以在你的代码中做到这一点:

 final ListView lv = (ListView) convertView.findViewById(R.id.list_view); for (int i = 0; i < lv.getChildCount(); i++) { ((TextView)lv.getChildAt(i)).setTextColor(getResources().getColor(R.color.black)); }