change color of selected listview item

前端 未结 5 1727
囚心锁ツ
囚心锁ツ 2020-12-15 10:07

I want to change color of list item when it will press

For that I did like below,

list_item_selector.xml



        
相关标签:
5条回答
  • 2020-12-15 10:17

    <item android:state_activated="true">
      <shape android:shape="rectangle">
        <solid android:color="#333333" />
        <padding android:left="5dp" android:right="5dp" />
      </shape></item>
    <item><shape android:shape="rectangle">
            <solid android:color="#222222" />
        </shape></item>
    

    0 讨论(0)
  • 2020-12-15 10:17

    use this

    android:background="@drawable/list_item_selector""
    
    0 讨论(0)
  • 2020-12-15 10:26

    Try with a custom adapter this also helps you to have full control over your items and set a default item selected; listView XML and item XML have no special setup.

    public class ListAdapter extends ArrayAdapter<MyObj> {
    
    private final int layoutInflater;
    private Context context;
    private  List<MyObj> items;
    private int mSelectedItem = 0;
    private int TAG_UNSELECTED = 0;
    private int TAG_SELECTED = 1;
    
    public ListAdapter(Context context, int resource, List<MyObj> items) {
        super(context, resource, items);
        this.context = context;
        this.layoutInflater = resource;
        this.items = items;
    }
    
    public void selectItem(int position) {
        mSelectedItem = position;
        notifyDataSetChanged();
    }
    
    
    @Override
    public int getViewTypeCount() {
        return 2;
    }
    
    @Override
    public int getItemViewType(int position) {
        return position == mSelectedItem ? TAG_SELECTED : TAG_UNSELECTED;
    }
    
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(layoutInflater, null);
        }
    
        MyObj myObj = items.get(position);
        TextView textView = (TextView) v.findViewById(R.id.title);
        textView.setText(myObj.title);
    
        int type = getItemViewType(position);
        if(type == TAG_SELECTED) {
            v.setBackgroundColor(Color.parseColor("#1da7ff"));
            textView.setTextColor(Color.parseColor("#ffffff"));
        } else {
            v.setBackgroundColor(Color.parseColor("#f8f8f8"));
            textView.setTextColor(Color.parseColor("#474747"));
        }
    
        return v;
    }
    
    }
    

    Then in your activity:

                ListView listView = (ListView) findViewById(R.id.list_view);
                ListAdapter adapter = new ListAdapter(mContext, R.layout.item_layout, list);
                listView.setAdapter(adapter);
                adapter.selectItem(0); // Default selected item
    
                // Get selected item and update its background
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                        adapter.selectItem(position);
                    }
                });
    
    0 讨论(0)
  • 2020-12-15 10:38

    Apply "@drawable/list_item_selector" to the row of that list(List item) not a List itself..

    Something like, your list item (list row)..

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:background="@drawable/list_item_selector">
            <TextView       android:id="@+id/textForList"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:padding="10sp"  />
    .
    .
    .
    </LinearLayout>
    

    list_item_selector.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_focused="true">
        <shape>
            <solid android:color="#66FFFFFF" />
        </shape>
    </item>
        <item>
        <shape>
            <solid android:color="#FF666666" />
        </shape>
    </item>
    
    </selector>
    
    0 讨论(0)
  • 2020-12-15 10:39

    You should be setting the selector to the row and not the listview itself.

    0 讨论(0)
提交回复
热议问题