zoukankan      html  css  js  c++  java
  • 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"
        
    />

  • 相关阅读:
    python3 bytes数据类型探讨
    字典
    列表及元组
    在py文件中设置文件头
    函数的作用域、global与nonlocal
    python中 的意义及用法
    int、bool和str
    while循环、格式化输出、运算符和编码初识
    python初认识、基础数据类型以及 if 流程控制
    列表遍历和生成器遍历效率对比
  • 原文地址:https://www.cnblogs.com/tt_mc/p/2526599.html
Copyright © 2011-2022 走看看