ListView改变里面TextView的字体颜色

方法1(ps:这个挺好用的)

  • 先从ListView属性出发,设置它为单选 (一定要设置)
//设置它为单选
android:choiceMode="singleChoice"
  • ListView的布局文件xml
<ListView
        android:id="@+id/lv_left"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2.5"
        android:layout_gravity="center"
        android:background="#ffffff"
        android:listSelector="@drawable/drawable_listview"
        android:choiceMode="singleChoice"
        android:scrollbars="none">
    </ListView>
  • 设置它的item布局的selector:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_item_list_view_classif"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center"
        android:textColor="@drawable/drawable_list_view_text"
        android:text="测试"/>

</LinearLayout>
  • drawable_list_view_text的布局文件(网上有好多给drawable文件里面设置多余属性android:state_activated="true"这个就够了)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:color="@color/red"/>
    <item android:color="@color/black"/>
</selector>
  • 给ListView一个默认选项(setItemChecked(int position,boolean,checked))
    setItemChecked(int position,boolean)
//给ListView一个默认选项
        listView.setItemChecked(0,true);

方法2

在Adapter里面一定要写上这句话

//设置选中效果
        if (selectedPosition == position){
            tvContent.setTextColor(Color.RED);
        }else {
            tvContent.setTextColor(Color.BLACK);
        }
  • 在Activity或Fragment里面调用一句话
//刷新
 lvdapter.notifyDataSetChanged();
  • Adapter源码,Adapter继承BaseAdapter
public class ClassificationFragmentListViewAdapter extends BaseAdapter{

    Context context;
    String[] list;

    private int selectedPosition = -1;
    public void setSelectedPosition(int position) {
        selectedPosition = position;
    }

    public ClassificationFragmentListViewAdapter(Context context, String[] list) {
        this.context = context;
        this.list = list;
    }

    /*
     *listView中显示的数据个数
     */

    @Override
    public int getCount() {
        return list.length;
    }

    /*
     *根据position获取一个listView中一个item对象
     */
    @Override
    public Object getItem(int position) {
        return list[position];
    }

    /*
     *根据position获取一个listView中一个item位置
     */
    @Override
    public long getItemId(int position) {
        return position;
    }

    /*
     *绘制视图--1.创建视图,2.初始化控件,3.填充数据
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //第一步 创建视图 建一个XML文件
        //实例化View对象
        View view = LayoutInflater.from(context).inflate(R.layout.item_list_view_classification, null);
        //第二步
        //初始化控件
        TextView tvContent = (TextView) view.findViewById(R.id.tv_item_list_view_classif);
        //第三步 先获取数据
        //通过position获取要填充的数据(list的item的值)
        String contrnt =list[position];
        //设置选中效果
        if (selectedPosition == position){
            tvContent.setTextColor(Color.RED);
        }else {
            tvContent.setTextColor(Color.BLACK);
        }
        //将数据显示在控件上
        tvContent.setText(contrnt);
        return view;
    }

}

推荐阅读更多精彩内容