我有一个ListActivity,我正在显示一个列表:
setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_single_choice, mStringList));
默认情况下,列表项的文本颜色为白色,我想将列表中文本视图的文本颜色更改为黑色。
我该怎么做?
答案 0 :(得分:84)
另一种最简单的方法是使用textSize,textStyle,color等创建一个包含所需textview的布局文件,然后将其与ArrayAdapter一起使用。
e.g。 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);
这样您就不需要为它创建自定义适配器了。
答案 1 :(得分:46)
我意识到这个问题有点陈旧但是这里有一个非常简单的解决方案。 您无需创建自定义ListView甚至是自定义布局。
只需创建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;
}
});
答案 2 :(得分:35)
您只需覆盖getView
ArrayAdapter
方法
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;
}
};
答案 3 :(得分:7)
最简单的方法是在不需要创建任何额外内容的情况下执行此操作,只需修改简单列表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;
}
};
答案 4 :(得分:4)
简单来说,“你不能通过简单的setListAdapter”来实现。您必须使用自定义列表视图来自由更改文本颜色或任何其他视图
答案 5 :(得分:3)
您可以使用setTextColor(int)方法或添加样式来更改文本颜色。
<style name="ReviewScreenKbbViewMoreStyle">
<item name="android:textColor">#2F2E86</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">10dip</item>
答案 6 :(得分:2)
我也遇到过这种情况。你可以处理上面的方法。但如果你通过就很简单 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。就这样。它的属性不会影响您的任务。我检查它工作正常。
答案 7 :(得分:1)
尝试使用此代码代替android.r.layout.simple_list_item_single_choice
创建自己的布局:
<?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>
答案 8 :(得分:1)
如果您想保留所有样式但更改一些细节,可以使用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));
答案 9 :(得分:1)
如果要创建扩展适配器的类,可以使用父变量来获取上下文。
<?php
您可以使用RecyclerView.Adapter执行相同的操作,但不使用getview(),而是使用onCreateViewHolder()。
答案 10 :(得分:0)
在res / values中创建一个xml文件并复制以下代码
<style name="BlackText">
<item name="android:textColor">#000000</item>
</style>
并在Manifest中指定活动中的样式,如下所示
android:theme="@style/BlackText"
答案 11 :(得分:-1)
试试这段代码......
<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>