Java 如何仅切换按钮的背景并保存状态(按下或未按下)
我正在尝试制作一个调查应用程序,学习一下FragmentContainerView和导航图。当我使用现有的小部件(如单选按钮或复选框)来回答问题时,一切都非常完美 当我尝试制作自己的小部件或更改普通按钮的行为,使其行为如以下屏幕截图所示时,就会出现问题: 该行为类似于切换按钮,但我不想更改文本(开/关文本)。我需要的是,当我点击按钮时,它被标记为选中(更改背景),当然,我需要能够稍后询问按钮是否选中 使用按钮和自定义选择器,将按钮设置为可检查,可以实现预期的行为 选择器(btn_toggle_background.xml):Java 如何仅切换按钮的背景并保存状态(按下或未按下),java,android,android-button,material-components-android,Java,Android,Android Button,Material Components Android,我正在尝试制作一个调查应用程序,学习一下FragmentContainerView和导航图。当我使用现有的小部件(如单选按钮或复选框)来回答问题时,一切都非常完美 当我尝试制作自己的小部件或更改普通按钮的行为,使其行为如以下屏幕截图所示时,就会出现问题: 该行为类似于切换按钮,但我不想更改文本(开/关文本)。我需要的是,当我点击按钮时,它被标记为选中(更改背景),当然,我需要能够稍后询问按钮是否选中 使用按钮和自定义选择器,将按钮设置为可检查,可以实现预期的行为 选择器(btn_toggle_
在XML布局中:
<?xml version="1.0" encoding="utf-8"?>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="60dp"
android:backgroundTint="@drawable/btn_toggle_background" <!-- CUSTOM SELECTOR -->
android:textColor="@drawable/btn_toggle_text" <!-- CUSTOM SELECTOR -->
android:checkable="true" <!-- CHECKABLE HERE -->
android:gravity="fill|fill_horizontal"
android:text="A través de mi compañía de seguros"
android:textAlignment="gravity"
android:textAllCaps="false"
app:icon="@android:drawable/btn_radio"
app:iconTint="@drawable/btn_toggle_icon" <!-- CUSTOM SELECTOR --> />
android:checkable=“true”
android:gravity=“fill | fill_horizontal”
android:text=“我的公司”
android:textAlignment=“重力”
android:textAllCaps=“false”
app:icon=“@android:drawable/btn_radio”
app:iconTint=“@drawable/btn\u toggle\u icon”/
但是按钮不再响应OnClick事件(我怀疑是为了使其可检查)。我假设它将响应OnCheckedChange事件,但它是一个不会触发普通按钮的事件
我还尝试从按钮扩展自定义视图,截取OnClick并通过自定义侦听器(接口)发送事件。在这种情况下,按钮行为不再有效。它将成为普通按钮,并忽略XML中为选中状态指定的样式和选择器
是否有一个小部件看起来像我需要的?从切换按钮扩展是否更合适?您可以使用:
<com.google.android.material.button.MaterialButton
android:checkable="true"
app:backgroundTint="@drawable/btn_toggle_background"
.../>
使用方法isChecked
了解状态:
button.isChecked
这正是我需要的。我不知道MaterialButton触发了该事件。谢谢
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:color="#eeeeee" />
<item android:state_checked="true" android:color="@color/...." android:alpha="xxx" />
</selector>
button.addOnCheckedChangeListener { button, isChecked ->
if (isChecked){
//
}
}
button.isChecked