2015-05-27 163 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