创建定制选择器

时间:2015-05-27 09:08:15

标签: android xml android-layout textview drawable

我有3 TextView,我想创建一个自定义selector drawable,其中包含:

  • 创建一个带圆角的矩形边框(已完成)
  • 当用户按下其中一个时,
  • 被选中

TextView s:

<LinearLayout android:id="@+id/info" android:layout_marginTop="68dp"
        android:layout_width="wrap_content" android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal">
        <TextView android:id="@+id/tour1"
            android:paddingLeft="10dp" android:paddingRight="10dp"
            android:paddingTop="8dp" android:paddingBottom="8dp"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:background="@drawable/back"
            android:gravity="center"
            android:text="Tour \n disponibili  \n 21"/>

        <TextView android:id="@+id/tour2" android:layout_toRightOf="@+id/tour1"
            android:paddingLeft="10dp" android:paddingRight="10dp"
            android:paddingTop="8dp" android:paddingBottom="8dp"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:background="@drawable/back"
            android:gravity="center"
            android:text="Tour \n prenotabili  \n 16"
            android:layout_marginLeft="16dp"/>

        <TextView android:id="@+id/tour3" android:layout_toRightOf="@+id/tour2"
            android:paddingLeft="10dp" android:paddingRight="10dp"
            android:paddingTop="8dp" android:paddingBottom="8dp"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:background="@drawable/back"
            android:gravity="center"
            android:text="Tour \n preferiti  \n 3"
            android:layout_marginLeft="16dp"/>
</LinearLayout>

我的Drawable selector个文件,back.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >

        <stroke android:width="1dip"
            android:color="#4fa5d5"/>
        <corners android:radius="7dp"/>
    </shape>
</item>
<item  android:state_pressed="true">
    <shape android:shape="rectangle" >
        <stroke android:width="5dip"
            android:color="#ff0000"/>
        <corners android:radius="7dip" />
    </shape>
</item>

我想知道如何:

  • 成功应用属性"?android:attr/selectableItemBackground"
  • 或者,正如我刚刚尝试的那样,应用自定义的。

不幸的是,我无法实现上述任何一项。在我的示例中,TextView始终显示第一个项目(没有android:state_pressed="true"属性的项目),当我按下它们时,它们永远不会切换到具有android:state_pressed="true"属性的项目。 / p>

我的代码中的缺陷在哪里?

2 个答案:

答案 0 :(得分:2)

尝试交换这两个项目的顺序,我认为这很重要:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:state_pressed="true">
        <shape android:shape="rectangle" >
        <stroke android:width="5dip"
            android:color="#ff0000"/>
        <corners android:radius="7dip" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle" >

        <stroke android:width="1dip"
            android:color="#4fa5d5"/>
        <corners android:radius="7dp"/>
        </shape>
    </item>
</selector>

修改

实际上,您可能需要将项目的描述放在单独的文件中:

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

答案 1 :(得分:1)

在应用了roarster的建议后,你必须使用android:clickable="true"

使TextViews可点击

选择器中项目的顺序很重要,因为选择器将选择与视图状态匹配的第一个(从顶部)项目,因此,“默认”状态(没有定义android:state_ *) )应该是最后一个,否则它将始终匹配。