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中,看起来没有帮助。
好的,这里有一些你应该清楚的事情:
- 您在xml文件中设置的背景颜色是您正在尝试定义的活动,而不是您正在定义的ListItems。
- 每个列表项都有自己的布局文件,如果您使用复杂的列表项目布局,则应该传递或填充它。
我将尝试用代码示例来解释这个问题:
****让我们开始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);
- 创build一个样式文件,例如:
my_styles.xml
并将其保存在res/values
。 -
添加下面的代码:
<?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>
-
将您的样式添加到您的
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)); }