2017-05-12 19 views
0

私は、境界線を持っているがボタンが押されたときに背景の色合いが異なるボタンと、ボタンの背景の色を変更する機能を持つボタンを作ろうとしています。私はadding a borderがそれをシェイプに割り当てていることを知っています。タップの状態はさまざまな項目のセレクタを通っていますが、ボタンの背景色はユーザが設定することになっています。タップ状態のユーザー設定可能なボタンを追加するにはどうすればよいですか?

タップ状態がなければ、私は、ユーザーがちょうど行って、私の形状の背景色を変更することを可能にすることができる午前:

GradientDrawable bgShape = (GradientDrawable) btn.getBackground(); 
     //color value is obtained from shared preferences 
     if (sharedPref.contains(pref_color)) { 
      String color = sharedPref.getString(pref_color, ""); 
      bgShape.setColor(Color.parseColor(color)); 
     } 

しかし、私のボタンがあることを行っている場合、私は最初の行を行うことはできませんセレクタが割り当てられました。私は描画可能な形状への参照をどのように得るのか分かりません。参考のため

、私のボタンの境界線の形状は次のとおりです。

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

    <stroke android:width="5px" android:color="#ffffff" /> 
</shape> 

セレクタは次のようになります。

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

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

</selector> 

は、これを実現する方法はありますか?

答えて

1

あなたは、これはサンプル引き出し可能sample.xmlにある

view.setBackground(drawable); 

を描画可能な層のためのIDを定義し、実行時に

LayerDrawable drawSettings = (LayerDrawable) 
getResources().getDrawable(R.drawable.sample); 
GradientDrawable backSettings = (GradientDrawable) 
drawSettings.findDrawableByLayerId(R.id.backtemp); 

をそのプロパティを変更し、変更色の後にボタンの背景にそれをリセットすることができます

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
android:id="@+id/backtemp"> 
<shape 
android:shape="oval" > 
<solid android:color="@color/default_color"/> 
</shape> 
</item> 

<item 
android:drawable="@drawable/w_pref"> 
</item> 
</layer-list> 
+0

明確にするために、私はこのドロアブルを割り当てますか? – Jason

+0

はいと色を変更した後setBackgroundをもう一度呼び出します。 –

+0

タップ状態をどうやって扱うのですか?私はまだセレクターをどこかで使用していますか? – Jason

関連する問題