Android: изменить цвет фона кнопки переключения, указывая на включение или отключение опций - PullRequest
4 голосов
/ 10 декабря 2011

У меня есть кнопка переключения, фон которой я хотел бы изменить при нажатии. Моя цель - изменить цвет кнопки даже после события нажатия на новый цвет. При повторном нажатии он переходит в исходное состояние.

Я использовал следующий код, но в моем случае цвет не сохраняется после события «Нажмите». Когда кнопка нажата, цвет меняется. Но как бы то ни было, он возвращается к исходному цвету кнопки, как только заканчивается событие нажатия.

Компоновка:

<ToggleButton android:id="@+id/price_activate_button" 
 android:layout_width="wrap_content" 
 android:textSize="15dp" 
 android:text="@string/string_price" 
 android:layout_alignParentLeft="true"
 android:layout_height="wrap_content" 
 android:background="@drawable/button_blue" 
 style="@style/ButtonText" 
 android:textOn="Price" 
 android:textOff="Price"></ToggleButton>

Style:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" 
  android:state_pressed="true">
<shape>
<solid
 android:color="#859dbc" />
<stroke
 android:width="1dp"
 android:color="#859dbc" />
<corners
 android:radius="2dp" />
<padding
 android:left="5dp"
 android:top="5dp"
 android:right="5dp"
 android:bottom="5dp" />
</shape>
</item>
<item android:state_pressed="true" >
<shape>
<solid
 android:color="#859dbc" />
<stroke
 android:width="1dp"
 android:color="#859dbc" />
<corners
 android:radius="2dp" />
<padding
 android:left="5dp"
 android:top="5dp"
 android:right="5dp"
 android:bottom="5dp" />
</shape>
</item>
<item android:state_focused="true"  android:state_pressed="false" >
<shape>
<solid
 android:color="#2c68e7" />
<stroke
 android:width="1dp"
 android:color="#2c68e7" />
<corners
 android:radius="2dp" />
<padding
 android:left="5dp"
 android:top="5dp"
 android:right="5dp"
 android:bottom="5dp" />
</shape>
</item>          
<item android:state_checked="true">
<shape>
<solid
 android:color="#2c68e7" />
<stroke
 android:width="1dp"
 android:color="#2c68e7" />
<corners
 android:radius="2dp" />
<padding
 android:left="5dp"
 android:top="5dp"
 android:right="5dp"
 android:bottom="5dp" />
</shape>
</item>
<item android:state_checked="false">
<shape>
<solid
 android:color="#859dbc" />
<stroke
 android:width="1dp"
 android:color="#859dbc" />
<corners
 android:radius="2dp" />
<padding
 android:left="5dp"
 android:top="5dp"
 android:right="5dp"
 android:bottom="5dp" />
</shape>
</item>   
</selector>

Класс деятельности:

final ToggleButton price_button = (ToggleButton)findViewById(R.id.price_activate_button);

price_button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(price_button.isChecked()){
            Toast.makeText(getApplicationContext(), "You have chosen: Yes", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "You have chosen: No", Toast.LENGTH_LONG).show();
        }
    }
});
...