【发布时间】:2019-07-30 19:16:06
【问题描述】:
我有一些切换按钮代表一周中的日子。
当用户点击ToggleButton 时,我希望它切换状态并改变颜色,向用户表明它已被点击。
这是我的ToggleButtons 之一的样子:
<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" />
我希望按钮在单击后看起来像这样(我想要相同的边框和形状,但只是改变了不同的颜色和状态):
答案here 不起作用,因为我的切换按钮已经有一个android:background,用于在按钮周围显示自定义边框。
答案here 不起作用,因为我使用的是ToggleButton 而不是SwitchCompat
编辑:
这是当前的android:background,我将ToggleButtons 设置为:
<?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,我结合了他们的答案。
首先,我为我的 ToggleButtons toggle_button_default.xml 和 toggle_button_checked.xml 创建了两个资源文件(在第一个 EDIT 中检查上面的代码)。基本上,两个 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
}
...
【问题讨论】:
标签: android android-layout togglebutton