У меня есть несколько кнопок переключения, которые представляют дни недели.
Когда пользователь нажимает на ToggleButton
, я хочу, чтобы он переключал состояния и изменял цвет, указывая пользователю, что он был нажат.
Вот как выглядит один из моих ToggleButton
:
<ToggleButton
android:id="@+id/toggleButton_monday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:background="@drawable/button_border"
android:textOff="MON"
android:textOn="MON"
app:layout_constraintEnd_toStartOf="@+id/toggleButton_tuesday"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView10" />
![enter image description here](https://i.stack.imgur.com/U7vzL.png)
Я хочу, чтобы кнопка выглядела так после нажатия (я хочу, чтобы та же граница и форма, но изменились только другой цвет и состояние):
![enter image description here](https://i.stack.imgur.com/dmKMU.png)
Ответ здесь не работает, поскольку у меня уже есть android:background
для моих кнопок переключения, чтобы показать пользовательскую рамку вокруг кнопки.
Ответ здесь не работает, так как я использую ToggleButton
, а не SwitchCompat
EDIT:
Вот текущее значение android:background
. Я устанавливаю ToggleButton
с:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="10dp"
/>
<solid
android:color="#FFFFFF"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="75dp"
android:height="40dp"
/>
<stroke
android:width="3dp"
android:color="#878787"
/>
</shape>
РЕДАКТИРОВАТЬ: РЕШЕНИЕ
Спасибо @Broken и @Moustafa Shahin, я использовал комбинацию их ответов.
Сначала я создал два файла ресурсов для моих кнопок ToggleButton toggle_button_default.xml
и toggle_button_checked.xml
(проверьте код выше в первом редактировании). По сути, цвета фона просто различаются в двух XML.
Во-вторых, я создал селектор с именем toggle_button_state.xml
и загрузил соответствующие файлы ресурсов, которые я создал выше:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- WHEN IS CHECKED -->
<item android:drawable="@drawable/toggle_button_default" android:state_checked="false" />
<!-- WHEN IS NOT CHECKED -->
<item android:drawable="@drawable/toggle_button_checked" android:state_checked="true" />
</selector>
И, наконец, для моих кнопок ToggleButtons я установил toggle_button_state
в качестве фона для них:
<ToggleButton
android:id="@+id/toggleButton_monday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/toggle_button_state"
android:textOff="MON"
android:textOn="MON"/>
В Activity у меня есть метод onClick
, который я могу использовать для отслеживания кликов:
class RentActivity : AppCompatActivity(), View.OnClickListener {
override fun onClick(v: View?) {
when(v?.id){
R.id.toggleButton_monday ->{
Toast.makeText(this, "Monday Clicked", Toast.LENGTH_LONG).show()
return
}
...