2016-09-06 14 views
2

トグルボタンのチェックボックスをオンまたはオフにしています。シェイプでカスタムレイヤーリストを使用し、さまざまな色を使用できる方法はありますか?私は実行時にXMLをデザインとして追加しています。ドロアブルを複数回使用するが、色が異なる

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" android:drawable="@drawable/toggle_custom"/> 
<item android:state_checked="false" android:drawable="@drawable/toggle_custom_off"/> 
</selector> 

そして、私のtoggle_customので

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/mainColourOn"> 
    <shape android:shape="rectangle" /> 
</item> 
<item android:bottom="10dp"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#E6FFFFFF"/> 
    </shape> 
</item> 

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/mainColourOff"> 
    <shape android:shape="rectangle"/> 
</item> 
<item android:bottom="10dp"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#FFF"/> 
    </shape> 
</item> 

 LayerDrawable layerOn = (LayerDrawable) getResources().getDrawable(R.drawable.toggle_custom, getTheme()); 

     LayerDrawable layerOff = (LayerDrawable) getResources().getDrawable(R.drawable.toggle_custom_off, getTheme()); 

     GradientDrawable toggleOn = (GradientDrawable) layerOn.findDrawableByLayerId(R.id.mainColourOn); 
     GradientDrawable toggleOff = (GradientDrawable) layerOff.findDrawableByLayerId(R.id.mainColourOff); 

     int colour = persons.get(i).getColour(); 

     toggleOn.mutate(); 
     toggleOff.mutate(); 
     toggleOn.setColor(colour); 
     toggleOff.setColor(colour); 

toggle_custom_off例えば1つの赤色を使用しているトグル、別のは用いた青色使用しています同じXML。おかげ

答えて

1

あなたは、レイヤリストのためDrawableをXMLを再利用し、プログラムによってこのような各ToggleButtonためStateListDrawableを作成することができます。

ToggleButton toggleButton1 = (ToggleButton) findViewById(R.id.togglebutton1); 
toggleButton1.setChecked(true); 

ToggleButton toggleButton2 = (ToggleButton) findViewById(R.id.togglebutton2); 
toggleButton2.setChecked(true); 

setToggleButtonColor(toggleButton1, ContextCompat.getColor(this, R.color.blue)); 
setToggleButtonColor(toggleButton2, ContextCompat.getColor(this, R.color.magenta)); 

enter image description here

void setToggleButtonColor(ToggleButton tButton, int colour) 
{ 
    LayerDrawable layerOn = (LayerDrawable) ContextCompat.getDrawable(this, R.drawable.toggle_custom); 
    layerOn.mutate(); 
    LayerDrawable layerOff = (LayerDrawable) ContextCompat.getDrawable(this, R.drawable.toggle_custom_off); 
    layerOff.mutate(); 
    Drawable toggleOn = layerOn.findDrawableByLayerId(R.id.mainColourOn); 
    Drawable toggleOff = layerOff.findDrawableByLayerId(R.id.mainColourOff); 

    toggleOn.setColorFilter(colour, PorterDuff.Mode.MULTIPLY); 
    toggleOff.setColorFilter(colour, PorterDuff.Mode.MULTIPLY); 

    StateListDrawable tbBackground = new StateListDrawable(); 

    tbBackground.addState(new int[]{android.R.attr.state_checked}, layerOn); 
    tbBackground.addState(StateSet.WILD_CARD, layerOff); 

    tButton.setBackgroundDrawable(tbBackground); 

} 

は、の2つのトグルボタンでそれをテストしてみましょう

+0

それは動作します!ありがとう、ありがとう!私はプリセット色ではなくint値を使用していたので、 'Mode.MULTIPLY'を' Mode.SRC'に変更しなければなりませんでした。 –

関連する問題