如何改变简单列表项的文字颜色

我有一个ListActivity,我正在显示一个列表:

setListAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_single_choice, mStringList)); 

默认情况下,列表项的文本颜色是白色的,我想将列表中文本视图的文本颜色改为黑色。

我应该怎么做?

另一个最简单的方法是创build一个布局文件,其中包含您希望使用的textSize,textStyle,color等文本视图,然后将其与ArrayAdapter一起使用。

例如mytextview.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv" android:textColor="@color/font_content" android:padding="5sp" android:layout_width="fill_parent" android:background="@drawable/rectgrad" android:singleLine="true" android:gravity="center" android:layout_height="fill_parent"/> 

然后像往常一样使用你的ArrayAdapter

 ListView lst = new ListView(context); String[] arr = {"Item 1","Item 2"}; ArrayAdapter<String> ad = new ArrayAdapter<String>(context,R.layout.mytextview,arr); lst.setAdapter(ad); 

这样你就不需要为它创build一个自定义的适配器。

我意识到这个问题是有点老,但这是一个非常简单的解决scheme,失踪。 您不需要创build自定义ListView或甚至自定义布局。

只需创build一个ArrayAdapter的匿名子类并重写getView()。 让super.getView()处理所有繁重的工作。 由于simple_list_item_1只是一个文本视图,您可以自定义它(例如设置textColor),然后返回它。

这里是我的一个应用程序的例子。 我正在显示最近的位置列表,我希望“当前位置”的所有出现都是蓝色的,其余的是白色的。

 ListView listView = (ListView) this.findViewById(R.id.listView); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MobileMuni.getBookmarkStore().getRecentLocations()) { @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = (TextView) super.getView(position, convertView, parent); String currentLocation = RouteFinderBookmarksActivity.this.getResources().getString(R.string.Current_Location); int textColor = textView.getText().toString().equals(currentLocation) ? R.color.holo_blue : R.color.text_color_btn_holo_dark; textView.setTextColor(RouteFinderBookmarksActivity.this.getResources().getColor(textColor)); return textView; } }); 

您只需重写ArrayAdaptergetView方法

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, mStringList) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView text = (TextView) view.findViewById(android.R.id.text1); text.setTextColor(Color.BLACK); return view; } }; 

最简单的方法来做到这一点,而不需要额外创build任何东西,只需要修改简单的列表TextView

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, strings) { @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = (TextView) super.getView(position, convertView, parent); textView.setTextColor({YourColorHere}); return textView; } }; 

简单的说, “你不能通过简单的setListAdapter来完成” 。 您必须使用自定义列表视图来自由更改文字颜色或任何其他视图

为自定义列表视图,你可以去这个链接

您可以使用setTextColor(int)方法或添加样式来更改文本颜色。

 <style name="ReviewScreenKbbViewMoreStyle"> <item name="android:textColor">#2F2E86</item> <item name="android:textStyle">bold</item> <item name="android:textSize">10dip</item> 

我也面临这种情况。 你可以处理上面的方法。 但如果您将simple_dropdown_item_1line作为资源传递,则很简单。 这是默认的黑色文本。

这是我在类似情况下取得的代码。

 ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_dropdown_item_1line,countryList); listView.setAdapter(arrAdapter); 

您的代码如下:

 setListAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, mStringList)); 

其实android.R.layout.simple_dropdown_item_1line是用于下拉。 我敦促你一次看到这个布局内容。 它只是简单的textview。 就这样。 它的属性不会影响你的任务。 我检查它工作正常。

试试这个代码而不是android.r.layout.simple_list_item_single_choice创build你自己的布局:

 <?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:checkMark="?android:attr/listChoiceIndicatorSingle" android:gravity="center_vertical" android:padding="5dip" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/black" android:textStyle="bold"> </CheckedTextView> 

如果你想保留所有的风格,但改变一些细节,你可以使用在Android上定义的默认样式,并改变你想要的

 <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="@android:color/background_light" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:background="?android:attr/activatedBackgroundIndicator" android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

然后使用以下设置适配器:

 setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item_custom, mStringList)); 

来源: https : //android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/simple_list_item_activated_1.xml

在res / values中创build一个xml文件并复制下面的代码

 <style name="BlackText"> <item name="android:textColor">#000000</item> </style> 

并在下面的Manifest中指定活动中的样式

  android:theme="@style/BlackText" 

如果您正在创build扩展适配器的类,则可以使用父variables来获取上下文。

 public class MyAdapter extends ArrayAdapter<String> { private Context context; @Override public View getView(int position, View convertView, ViewGroup parent) { context = parent.getContext(); context.getResources().getColor(R.color.red); return convertView; } } 

你可以用RecyclerView.Adapter来做同样的事情,但是你可以使用onCreateViewHolder()来代替getview()。

试试这个代码…

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffff00"> <ListView android:id="@+id/android:list" android:layout_marginTop="2px" android:layout_marginLeft="2px" android:layout_marginRight="2px" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/shape_1" android:listSelector="@drawable/shape_3" android:textColor="#ffff00" android:layout_marginBottom="44px" /> </RelativeLayout>