如何在ListView上更改颜色和字体

时间:2011-09-09 11:45:27

标签: android listview fonts

我正在尝试更改我的ListView上的字体(颜色和大小)和背景。我想用不在xml上的代码行来改变它。 我的列表视图如下:  xml:

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="18sp" android:text="@string/hello">
</TextView>

我的代码是

public class NewsActivity  extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

 // ArrayAdapter listItemAdapter = new ArrayAdapter( this,android.R.layout.simple_list_item_1, v_itemList );

      setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,ynetList));

      View v=getListView() ;

      ListView lv = getListView();

下一步是什么?请根据我的代码给我一个例子

9 个答案:

答案 0 :(得分:31)

您需要创建一个CustomListAdapter。

public class CustomListAdapter extends ArrayAdapter <String> {

    private Context mContext;
    private int id;
    private List <String>items ;

    public CustomListAdapter(Context context, int textViewResourceId , List<String> list ) 
    {
        super(context, textViewResourceId, list);           
        mContext = context;
        id = textViewResourceId;
        items = list ;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent)
    {
        View mView = v ;
        if(mView == null){
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(id, null);
        }

        TextView text = (TextView) mView.findViewById(R.id.textView);

        if(items.get(position) != null )
        {
            text.setTextColor(Color.WHITE);
            text.setText(items.get(position));
            text.setBackgroundColor(Color.RED); 
            int color = Color.argb( 200, 255, 64, 64 );
                text.setBackgroundColor( color );

        }

        return mView;
    }

}

列表项看起来像这样(custom_list.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView"
    android:textSize="20px" android:paddingTop="10dip" android:paddingBottom="10dip"/>
</LinearLayout>

使用TextView api来根据自己的喜好来装饰文字

你会像这样使用它

listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList);
mListView.setAdapter(listAdapter);

答案 1 :(得分:7)

创建一个CustomAdapter,并且你有getView()所以如果你想更改listview背景颜色,请使用:

v.setBackgroundColor(Color.CYAN);

如果您想更改textColor,请执行以下操作:

tv.setTextColor(Color.RED);

和textSize:

tv.setTextSize(20);

其中'v'是listview,'tv'是textview

答案 2 :(得分:3)

更好的是,您不需要为列表单元格视图创建单独的android xml布局。你可以使用&#34; android.R.layout.simple_list_item_1&#34;如果列表只包含textview。

private class ExampleAdapter extends ArrayAdapter<String>{

    public ExampleAdapter(Context context, int textViewResourceId, String[] objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        View view =  super.getView(position, convertView, parent);

        TextView tv = (TextView) view.findViewById(android.R.id.text1);
        tv.setTextColor(0);

        return view;
    }

答案 3 :(得分:1)

如果您想设置列表的背景,请将图像放在&lt;的TextView&GT;

< ImageView
android:background="@drawable/image_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

如果您想更改颜色,请将颜色代码放在上面的文本框中,如下所示

 android:textColor="#ffffff"

答案 4 :(得分:1)

如果您只需要更改View的某些参数以及ArrayAdapter的默认行为,那么就可以了:

 import android.content.Context;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;

 public class CustomArrayAdapter<T> extends ArrayAdapter<T> {

    public CustomArrayAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

            // Here all your customization on the View
            view.setBackgroundColor(.......);
            ...

        return view;
    }


 }

答案 5 :(得分:1)

如果您想使用 colors.xml 中的颜色,请进行试验 :

   public View getView(int position, View convertView, ViewGroup parent) {
        ... 
        View rowView = inflater.inflate(this.rowLayoutID, parent, false);
        rowView.setBackgroundColor(rowView.getResources().getColor(R.color.my_bg_color));
        TextView title = (TextView) rowView.findViewById(R.id.txtRowTitle);
        title.setTextColor(
            rowView.getResources().getColor(R.color.my_title_color));
        ...
     }

您也可以使用:

private static final int bgColor = 0xAAAAFFFF;
public View getView(int position, View convertView, ViewGroup parent) {
        ... 
        View rowView = inflater.inflate(this.rowLayoutID, parent, false);
            rowView.setBackgroundColor(bgColor);
...
}

答案 6 :(得分:0)

您可以选择像

这样的孩子
TextView tv = (TextView)lv.getChildAt(0);
tv.setTextColor(Color.RED);
tv.setTextSize(12);    

答案 7 :(得分:0)

在Java代码中使用它们:

 color = getResources().getColor(R.color.mycolor);

getResources()方法返回当前活动的ResourceManager类,getColor()要求管理员在给定资源ID的情况下查找颜色

答案 8 :(得分:0)

在android 6.0中,您可以更改文本的颜色,如下所示

holder._linear_text_active_release_pass.setBackgroundColor(ContextCompat.getColor(context, R.color.green));