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"
        
    />

  • 相关阅读:
    现在,为什么连一个 JavaScript 的厌恶者都认为:每个开发人员都应该学习 JavaScript
    .NET 部署_ASP.NET 部署的八大关键实践
    Ext.Net 1.2.0_Ext.Net.DateColumn 日期格式问题
    Ext.Net 1.2.0_Ext.UX.GMapPanel Google Map 插件
    Yahoo Web UIs——Java开发者丰富的Web UI
    单元测试_使用 Nmock 单元测试 .NET 业务对象
    公共语言运行库中的程序集05程序集安全注意事项
    Entity Framework_成功针对多种数据库使用实体框架(EF)
    反射_01概述和反射中的运行时类型以及查看类型信息
    公共语言运行库中的程序集01概述
  • 原文地址:https://www.cnblogs.com/tt_mc/p/2526599.html
Copyright © 2011-2022 走看看