2

Button をデフォルトで透明な背景で描画し、押されたときに暗い青色の背景で描画し、選択されたときに明るい青色の背景で描画したいと思います。Button.setSelected(!Button.isSelected())ボタンの背景を下のセレクターに設定し、ボタンがクリックされたときに呼び出しています。押された状態は適切に機能しますが、ボタンを選択すると透明な背景で描画されます。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_pressed="true" android:drawable="@drawable/pressedbuttonshape" /> 
  <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/selectedshape" /> 
  <item android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_focused="true" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_selected="true" android:drawable="@drawable/selectedshape" /> 
  <item android:drawable="@drawable/tranpsshape" /> 
</selector>

selectedshape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#A3DAF2"/>
</shape>

押されたボタン形状.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#4ABDE8/>
</shape>

tranpsshape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#00000000"/>

</shape>
4

2 に答える 2

5

ドキュメントによると

状態が変化するたびに、状態リストが上から下にトラバースされ、現在の状態に一致する最初の項目が使用されます。選択は「最適な一致」に基づくのではなく、単純に、州。

state_selectedしたがって、上に配置する必要がありますstate_focused。したがって、ファイルは次のようになります

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
    <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/tranpsshape" /> 
    <item android:state_pressed="true" android:drawable="@drawable/pressedbuttonshape" /> 
    <item android:state_selected="true" android:drawable="@drawable/selectedshape" />         
    <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/selectedshape" /> 
    <item android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
    <item android:state_focused="true" android:drawable="@drawable/tranpsshape" /> 
    <item android:drawable="@drawable/tranpsshape" /> 
</selector>
于 2012-09-07T15:24:31.697 に答える
2

選択は「ベスト マッチ」に基づくのではなく、単純に州の最小基準を満たす最初のアイテムに基づいて行われます。

http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

これらの状態の1つが現在の状態と一致しているため、透過的だと思います

  <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/tranpsshape" />
  <item android:state_enabled="true" android:drawable="@drawable/tranpsshape" /> 
  <item android:state_focused="true" android:drawable="@drawable/tranpsshape" /> 

入れてみる

<item android:state_selected="true" android:drawable="@drawable/selectedshape" /> 

上部に配置するか、前のケースに基準を追加します。

于 2012-09-07T15:23:36.083 に答える