• android listview selector


    The solution by dglmtn doesn't work when you have a 9-patch drawable with padding as background. Strange things happen, I don't even want to talk about it, if you have such a problem, you know them.

    Now, If you want to have a listview with different states and 9-patch drawables (it would work with any drawables and colors, I think) you have to do 2 things:

    1. Set the selector for the items in the list.
    2. Get rid of the default selector for the list.

    What you should do is first set the row_selector.xml:


    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_enabled="true" 
         android:state_pressed
    ="true" android:drawable="@drawable/list_item_bg_pressed" />
        <item android:state_enabled="true"
         android:state_focused
    ="true" android:drawable="@drawable/list_item_bg_focused" />
        <item android:state_enabled="true"
         android:state_selected
    ="true" android:drawable="@drawable/list_item_bg_focused" />
        <item
         
    android:drawable="@drawable/list_item_bg_normal" />
    </selector>

    Don't forget the android:state_selected. It works like android:state_focused for the list, but it's applied for the list item.

    Now apply the selector to the items (row.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:orientation
    ="horizontal"
    android:background
    ="@drawable/row_selector"
    >
    ...
    </RelativeLayout>
    Make a selector for the list (to get rid of the default one which ruins the effect) - list_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_enabled="true" 
         android:state_pressed
    ="true" android:drawable="@color/android:transparent" />
        <item android:state_enabled="true"
         android:state_focused
    ="true" android:drawable="@color/android:transparent" />
        <item
         
    android:drawable="@color/android:transparent" />
    </selector>

    Notice that it makes all the states transparent. That's what I meant by getting rid of the default states.

    Last, but not least - apply the selector to the listview:

     

    <ListView
        
    android:id="@+id/android:list"
        ...
        android:listSelector
    ="@drawable/list_selector"
        
    />

  • 相关阅读:
    FPGA实现USB2.0同步读数据传输且用chipscop抓取波形(3)
    FPGA实现对USB2.0的同步数据传输及USB2.0固件配置(2)
    通过MATLAB实现图像数据转换成.bin格式在USB2.0上传输(1)
    【转】ssh免密码登录的原理
    【转】ssh登录原理以及ssh免密码登陆
    Windows与VMware中的CentOS系统互通访问
    第十一章 条件逻辑
    第十章 再谈连接
    第九章 子查询
    第八章 分组和聚集
  • 原文地址:https://www.cnblogs.com/tt_mc/p/2526599.html
Copyright © 2020-2023  润新知