2012-02-27 216 views
3

如何更改添加到ListView的项目的文本颜色。我需要在代码中根据特定条件以编程方式更改颜色,并将不同的行更改为不同的文本颜色(例如,行0 =红色,行1 =白色,行3 =蓝色等)。在xml布局中设置文本颜色将不符合我的要求。这里是我的代码:更改ListView项目的文本颜色

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 

    setListAdapter(new ArrayAdapter<String>(ListViewEx.this, 
      R.layout.list_item_1, Global.availableDecks)); 

//something like this 
//listview.getPosition(0).setTextColor(red); 
//listview.getPosition(1).setTextColor(white); 
//listview.getPosition(2).setTextColor(blue); 

和我的XML:

<?xml version="1.0" encoding="utf-8"?> 


    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/label" 
    android:layout_width="match_parent" 
    android:layout_height="35dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textSize="30px" 
    android:layout_marginLeft="5px" 
    android:singleLine="true" 
    /> 

回答

4

使用android:textColor="hex code"参数TextView的标签

3

您可以通过XML和Java代码改变时(runtime内)也....

在XML插件,你需要定义::

android:textColor="Hex code" 

像::

android:textColor="#000000" 

在运行时,你需要定义::

TextView tv = (TextView) aView.findViewById(R.id.txvx); 
       tv.setTextColor(Color.RED); 
8

实现你自己的ArrayAdapter并覆盖getView()方法d:

public class Adapter1 extends ArrayAdapter<String> { 

    public Adapter1(Context context, int resID, ArrayList<String> items) { 
     super(context, resID, items);      
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = super.getView(position, convertView, parent); 
     if (position == 1) { 
      ((TextView) v).setTextColor(Color.GREEN); 
     } 
     return v; 
    } 

} 

不要忘了提供一个替代else子句颜色设置为默认,这样你就不会有问题,当你在处理回收的一行。 然后在您的活动:

setListAdapter(new Adapter1(ListViewEx.this, 
      R.layout.list_item_1, Global.availableDecks)); 
+1

我来到这里是因为我有一个地方改变文字颜色似乎在泄漏到另一行,我以为是你提到的回收行发行的问题。谢谢! – 2018-02-07 20:16:42