0

我有一个ListView并为ListView项目创建了一个xml文件。如何在Android中为选定的TextView定义颜色?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_selector_back" 
    android:minHeight="?attr/listPreferredItemHeight" 
    android:orientation="vertical"> 

    <CheckedTextView 
     android:id="@+id/list_item_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:textColor="@color/list_item_selector_fore" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/list_item_author" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/list_item_selector_fore" /> 

     <!-- and many more TextView elements --> 

    </LinearLayout> 
</LinearLayout> 

list_item_selector_fore.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@android:color/white" android:state_pressed="true" /> 
    <item android:color="@android:color/white" android:state_activated="true" /> 
    <item android:color="@android:color/white" android:state_focused="true" /> 
    <item android:color="@android:color/black" /> 
</selector> 

正如你所看到的,我的根LinearLayout定义的背景一次。但是我必须每TextView设置android:textColor="@color/list_item_selector_fore"。 我用前景试过了,但没有发生任何事情。我怎样才能让这个更聪明?

怎么看: two list view items

+0

可以通过编程方式找到你的'LinearLayout'和文字颜色的所有孩子们个个。 – user3486470

+0

请发布你正在查看的视图类型的图像@ EV221 – Lampard

+0

你想实现什么? –

回答

0

如果我理解正确的问题,你想改变一个TextView内的文本的颜色。从你的XML似乎你希望它是onClick因此,你可以这样做:

TextView textView = (TextView) findViewById(R.id.myTextView); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView.setTextColor('set text color here'); 
      } 
     }); 

编辑:

如果你有ListView内这些项目我建议,对于最简单的方法你要实现你想要的就是设置OnItemClickListener,然后根据OnItemClick事件更改textColor,这可能看起来像这样;

ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView textView = (TextView) view.findViewById(R.id.rowItemTextView); 
      textView.setTextColor('color goes here'); 
     } 
    }); 

希望这段简短的代码将引导您朝着正确的方向前进。

+0

是的,但我有几个TextViews。我不想让他们手动。我想改变xml中的颜色。这种方法的优点是在滚动时保存颜色状态。 – EV221

+0

我看到你已经编辑添加一张你的意思,我会编辑我的答案〜 – Max

+0

问题是,当我滚动ListView的回收时,颜色消失。但是,如果我使用这种风格或XML的东西,如果我回滚,背景颜色仍然存在。 – EV221

0

如果你想对所有的TextView做到这一点,最好的办法应该是子类的TextView

public class CustomeTextView extends TextView{ 

    public CustomeTextView(Context context) { 
     super(context); 
     this.setTextColor(R.color.white); 
    } 
} 
相关问题