【问题标题】:Android ListView Text ColorAndroid ListView 文本颜色
【发布时间】:2011-05-30 19:49:12
【问题描述】:

我正在尝试将 ListView textColor 设置为黑色,因为我使用的是白色背景。

这是我的邮件活动

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 中尝试过,但似乎没有帮助。

【问题讨论】:

    标签: android listview


    【解决方案1】:

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

    1. 您在 xml 文件中设置的背景颜色属于活动,而不是您尝试定义的 ListItems。
    2. 每个列表项都有自己的布局文件,如果您对列表项使用复杂的布局,应将其传递或扩展。

    我将尝试通过代码示例来解释这一点:

    ****让我们从 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 的布局资源和R.id.list_content,这是我们声明的TextView ID。我也将 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);
    

    【讨论】:

    • 非常感谢朋友。我从来不知道 ListView 有一个单独的 xml 文件
    • 这给了我错误:ArrayAdapter 要求资源 ID 是 TextView。您是如何在不编写自己的适配器的情况下使其工作的?
    • @odiggity,使用 4 参数构造函数而不是 3。如果您已经这样做了,那么 4 arg 构造函数中的第三个 arg 是对列表项布局中描述的 textview 的 id 引用,简而言之我的示例中的 R.id.list_content 是 id 指代我的列表项布局中的 textview 指定的 R.layout.list_black_text
    • 不错,但很短,straight solution here
    • 定义一种颜色的时间太长了,你不觉得吗?
    【解决方案2】:
    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. 将您的样式添加到AndroidManifest.xml 中的Activity 定义中作为android:theme 属性,并将您创建的样式的名称指定为值。例如:

      <activity android:name="your.activityClass" android:theme="@style/ListFont">
      

    注意:Widget.ListView 来自 here。另请检查this

    【讨论】:

    • 我试过了,它改变了标题栏的颜色,而不是列表项的颜色。
    • 它很棒,我喜欢它...因为我在列表视图中动态添加项目。我不需要定义任何文本视图....
    • 您是否将整个 ListView 样式设置为活动?
    【解决方案3】:

    我克隆了simple_list_item_1(Alt + 单击)并将副本放在我的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);
    

    【讨论】:

    • 这是最简单最干净的解决方案!
    • 最佳解决方案!!!
    【解决方案4】:

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

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

    您为不属于您的 ListView 的 TextView 设置了黑色文本颜色。这里是自己的item(LinearLayout的子item)。

    【讨论】:

      【解决方案5】:

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

      请在此处查看: CommonsWare answers

      【讨论】:

      • 其实这是最好的解决方案。如果其他人也有同样的问题,那就试试这个。
      【解决方案6】:

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

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

      【讨论】:

      • 从 -1 向上投票,因为这很好用,如果你对 lv.getChildAt(i) 进行了正确的类型转换,例如在我的情况下,类型转换是 AppCompatCheckedTextView
      【解决方案7】:

      如果您没有设置活动样式,它会显示黑色背景。如果您想进行更改,例如白色背景,listview 的黑色文本,那么这是一个困难的过程。

      添加 android:theme="@style/AppTheme" 在 Android 清单中

      【讨论】:

        【解决方案8】:

        我需要用不同颜色的物品制作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[] 数组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多