Android ListView文字颜色

时间:2010-12-26 10:04:16

标签: 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,看起来并没有帮助。

8 个答案:

答案 0 :(得分:144)

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

  1. 您在xml文件中设置的背景颜色属于活动,而不是您尝试定义的ListItem。
  2. 每个列表项都有自己的布局文件,如果您对列表项使用复杂的布局,应该传递或膨胀。
  3. 我将尝试用代码示例解释这个:

    ****让我们从ListItems布局开始** :将它保存在您Android项目的res/layout文件夹中,并说出: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。您必须为TextView分配一个ID才能使用它。

    现在来到你的屏幕/活动/主要布局,正如我所说,你正在使用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。我还将ArrayAdapter更改为String类型,因为它是通用的。

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

    凌乱但快速修复方式
    如果您不想继续使用复杂的布局定义等,也可以通过快速修复来完成此任务。

    虽然实例化适配器声明了一个内部类来执行此操作,但这里是代码示例:

        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 :(得分:21)

  1. 创建样式文件,例如: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. 将您的样式添加到Activity AndroidManifest.xml作为android:theme属性的<activity android:name="your.activityClass" android:theme="@style/ListFont"> 定义中,并将您创建的样式名称指定为值。例如:

    Widget.ListView

  4. 注意:{{1}}来自here。同时检查this

答案 2 :(得分:8)

我克隆了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);

答案 3 :(得分:3)

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

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

并为TextView设置黑色文本颜色,而不是ListView的一部分。它是一个自己的项目(LinearLayout的子项)。

答案 4 :(得分:0)

永远不要使用getApplicationContext()。只需将您的活动用作上下文。看看是否有帮助。

请在这里查看: CommonsWare answers

答案 5 :(得分:0)

如果您没有设置活动样式,则会显示黑色背景。如果您想要进行更改,例如白色背景,列表视图的黑色文本,则很难处理。

ADD android:theme =“@ style / AppTheme” 在Android Manifest 中。

答案 6 :(得分:0)

我需要用不同颜色的物品制作一个ListView。我修改了Shardul的方法,结果如下:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_list_item_1, colorString) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView textView = (TextView) super.getView(position, convertView, parent);
                textView.setBackgroundColor(assignBackgroundColor(position));
                textView.setTextColor(assignTextColor(position));
                return textView;
            }
        };
        colorList.setAdapter(adapter);

assignBackgroundColor()assignTextColor()是分配所需颜色的方法。可以将它们替换为int[]数组。

答案 7 :(得分:-1)

您可以在代码中执行此操作:

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));
}