如何更改简单列表项的文本颜色

时间:2011-04-06 08:46:49

标签: android listview

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

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

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

我该怎么做?

12 个答案:

答案 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”来实现。您必须使用自定义列表视图来自由更改文本颜色或任何其他视图

for Custom Listview you can go with this link

答案 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));

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

答案 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>