2011-03-23 165 views
1

我有一个简单的ListView,它是使用Array Adapter和ArrayList创建的;更改ListView中的文本颜色

无论如何要访问列表视图中的某一行,然后更改列表视图中该行所在的文本视图的文本颜色?

我知道如何改变一个TextView的文本颜色,但我访问文本视图是列表视图

回答

12

如果您查看simple_list_item_1的源代码,您会发现它只是一个TextView。源代码位于:

<sdk-dir>/platforms/<your-platform>/data/res/layout/simple_list_item_1 

ArrayAdapter超类将在其getView方法中返回该TextView。这意味着你可以继承ArrayAdapter的子类,并且在你的子类的getView方法中,你可以简单地链接到超类,将它返回到TextView并执行你的操作。例如,如果你想在你的列表中的前三个项目设置为TEXTSIZE 24,其余的14,你可以做到以下几点:

public View getView(int position, View convertView, ViewGroup parent) { 
    TextView tv = (TextView) super.getView(position, convertView, parent); 

    if (position < 3) { 
    tv.setTextSize(24.0f); 
    } else { 
    tv.setTextSize(14.0f); 
    } 
    return tv; 
} 

如果您使用的是simple_list_item_1管理更复杂的搜索,你可以通过检查源代码来找出View上元素的id,然后在由超类返回的View上调用findViewById。例如,two_line_list_item.xml拥有的android.R.id.text1android.R.id.text2 IDS TextViews,所以你应该能够得到他们把手如下:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 
    TextView tv1 = (TextView)v.findViewById(android.R.id.text1); 
    TextView tv2 = (TextView)v.findViewById(android.R.id.text2); 

    //do what you want with the TextViews 
} 
1

通过自定义列表项的内部有问题,在你的适配器getView方法,你可以改变通过调用findViewById(R.id.myText)然后调用setTextColor可轻松获得文本颜色。实际上,您可以使用内置的列表项来执行此操作,您只需要知道TextView的ID ...我不会徒手,但您应该能够轻松找到它。

如果您使用的是标准ListView项目,若要在XML中更改它,请参阅Applying Styles and Themes以更改文本颜色。

+0

那么有没有办法做到这一点在Java文件?我将根据一些输入值动态更改它 – au789 2011-03-23 01:25:34

+0

使用自定义列表项,在适配器'getView'方法中,您可以通过调用'findViewById(R.id.myText)'方便地更改文本颜色,然后调用'setTextColor '。实际上,您可以使用内置的列表项来完成此操作,您只需要知道TextView的'ID'即可。 – 2011-03-23 01:29:36

+0

所以你说这是不可能的数组列表和阵列适配器。如果我想实现结果,我需要制作一个自定义列表项目? – au789 2011-03-23 01:32:05