0

私が欲しいもの:状態リストドロアブルの<item>に複数の状態を追加すると、動作が停止します。どうして?

透明な背景を持つImageView。クリックすると背景が青色に変わり、何かがクリックされるまで青色のままになります。私はそれのための状態リストdrawableを使用しています。何が起こっている

次のようにコードが指定されています。 問題は、背景が青色に変わりますが、青色のままではありません。だから、android:state_pressedは、である瞬間を表しているにすぎないと思いました。そこで、android:state_pressed="true"の直後にandroid:state_selected="true"button_state_list_drawable.xmlに追加しました。 それでは、画像ビューがであっても、背景が青色に変わることがなくなり、がクリックされました。

どうすれば修正できますか?このようなXMLで定義さ

ImageView

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/fragment_imageView" 
     android:src="@drawable/ic_photo" 
     android:background="@drawable/button_state_list_drawable" 
     android:clickable="true" /> 

button_state_list_drawable.xmlである:

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

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

    <item android:drawable="@drawable/button_enabled_state_drawable" /> 

</selector> 

button_pressed_state_drawable.xmlある:

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

    <size android:width="50dp" 
     android:height="50dp" /> 

    <padding android:left="25dp" 
     android:right="25dp" 
     android:top="25dp" 
     android:bottom="25dp" /> 

    <stroke android:color="#fff" 
     android:width="1dp" /> 

    <solid android:color="#1aafd0" /> 

</shape> 

button_enabled_state_drawable.xmlである:

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

    <size android:width="50dp" 
     android:height="50dp" /> 

    <padding android:left="25dp" 
     android:right="25dp" 
     android:top="25dp" 
     android:bottom="25dp" /> 

    <stroke android:color="#fff" 
     android:width="1dp" /> 

    <solid android:color="@android:color/transparent" /> 

</shape> 
+0

残りの['button states'](http://developer.android.com/guide/topics/resources/color-list-resource.html)(' focused'、 'selected'など)を追加しようとしましたか?多分あなたは状態を渡し、色はデフォルトの状態に戻ります。 – yennsarah

答えて

1

(このためか、それが自動的にそれをしない場合 - 私わからない)

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 


    <item android:drawable="@drawable/button_enabled_state_drawable" 
     android:state_enabled="true" /> 

    <item android:drawable="@drawable/button_pressed_state_drawable" 
     android:state_pressed="true" /> 

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

    <item android:drawable="@drawable/your_button_default_drawable"/> 

</selector> 

そして、私はあなたがプログラムで選択された状態を追加することがあると思う:それはこのようなものでなければなりません最近この問題がありました。これが私のやり方です。あなたのstate_pressed項目から

<item android:drawable="@drawable/button_pressed_state_drawable" 
     android:state_selected="true" 
     android:state_pressed="false" /> 

も削除android:state_selected="true":あなたは状態項目をデフォルトのどこか前に、あなたのbutton_state_list_drawable.xmlで

は、これを追加します。

はその後ImageViewのためのあなたのクリックリスナーの初めに、これは私の問題を解決していた

yourImageView.setSelected(true); 

を書きます。それがあなたを助けることを願ってください。

1

解決策であるかどうかわかりませんが、コードを表示する必要があります。セレクタにデフォルトの状態を追加していないので、あなたの選択した状態を見ることができません(あなたはそれをyurの質問で書きましたが、投稿していません)。私は

yourImageView.setOnClickListener(new OnClickListener(){ 
     @Override 
    public void onClick(View v){ 

     if(yourImageView.isSelected()){ 
      yourImageView.setSelected(false); 
      }else{ 
      yourImageView.setSelected(true); 
      } 
    } 
}); 
+0

いいえ、私は同じドロアブルに追加しました: ''それを表示する質問を編集し、既定の状態 – Solace

+0

を確認しますが、上記のように選択状態をプログラムで設定しますか? – Opiatefuchs

+0

ええ、私はそれを試みるつもりです。 – Solace

関連する問題