2015-05-27 165 views
0

我有3 TextView,我想创建一个自定义selectordrawable其中:创建自定义选择

  • 圆角(完成)
  • 当用户按下一个被选中创建一个矩形边框他们的

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> 

Drawableselector文件,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"属性的项目。

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

+0

尝试使用Button而不是Textview。 –

回答

1

应用roarster的建议后,您必须使TextViews可点击使用android:clickable="true"

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

+0

谢谢,它工作!以及如何应用属性'?android:attr/selectableItemBackground'? –

+0

为你的视图设置背景:'android:background =“?android:attr/selectableItemBackground”' 但是,既然你想为selectableItemBackground提供一个自定义drawable,你需要在你的主题中覆盖它(并且确保Activity加载你的布局是使用主题)使用''item name =“android:selectableItemBackground”> @ drawable/back' – FunkTheMonk

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> 
+0

我试过了,但没有奏效 –

+0

@CrisBenois是的,我想到了另一件事情,我之前绊倒了我,并添加它作为编辑 – roarster

+0

尝试使用''项android:state_pressed =“false”>'为未按州。 – SlashG