我希望按钮背景在单击按钮后保持特定颜色,并在按下其他按钮时再次更改颜色。我认为这是“以州为中心”的状态。
但是,按下或不按下按钮时,我似乎只有两个状态。
我是否正确理解state_focused状态,或者我的StateListDrawable(见下文)是错误的?
<?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="false"><shape>
<solid android:color="#00ff00" />
</shape></item>
<item android:state_pressed="true"><shape>
<solid android:color="#ff0000" />
</shape></item>
<item><shape>
<solid android:color="#0000ff" />
</shape></item>
</selector>
答案 0 :(得分:42)
state_focused
。使用触摸时,视图通常不会显示聚焦状态。
答案 1 :(得分:35)
答案 2 :(得分:15)
https://developer.android.com/guide/topics/resources/drawable-resource.html
android:state_pressed
布尔。如果在按下对象时使用此项目(例如触摸/点击按钮时),则为“true”;如果此项应在默认的非按下状态下使用,则为“false”。
android:state_focused
布尔。如果在对象具有输入焦点时(例如当用户选择文本输入时)应该使用此项,则为“true”;如果此项目应在默认的非聚焦状态下使用,则为“false”。
android:state_hovered
布尔。如果对象被光标悬停时应使用此项,则为“true”;如果此项应在默认的非悬停状态下使用,则为“false”。通常,这种抽屉可能与用于“聚焦”状态的抽屉相同 在API级别14中引入。
android:state_selected
布尔。 “true”如果在使用方向控件导航时对象是当前用户选择时应该使用此项(例如,当使用d-pad导航列表时);如果未选择对象时应使用此项,则为“false” 当焦点(android:state_focused)不足时(例如当列表视图具有焦点并且使用d-pad选择其中的项目时),将使用所选状态。
android:state_checkable
布尔。如果对象可检查时应使用此项,则为“true”;如果对象不可检查则应使用此项目时为“false”。 (仅当对象可以在可检查和不可检查的小部件之间转换时才有用。)
android:state_checked
布尔。如果在检查对象时应使用此项,则为“true”;如果在取消选中对象时应该使用它,则为“false”。
android:state_enabled
布尔。 “true”如果在启用对象时应该使用此项(能够接收触摸/点击事件);如果在禁用对象时应该使用它,则为“false”。
android:state_activated
布尔。如果在将对象激活为持久选择时(例如,在持久导航视图中“突出显示”先前选择的列表项),则应使用此项;“true”;如果在未激活对象时应使用“false” 在API级别11中引入。
android:state_window_focused
布尔。如果应用程序窗口具有焦点(应用程序位于前景)时应使用此项目,则为“true”;如果应用程序窗口没有焦点时应使用此项目,则为“false”(例如,如果通知阴影为拉下或出现对话框。)
答案 3 :(得分:0)
我知道它来自doco
<强>机器人:state_focused 强>
State value for StateListDrawable, set when a view has input focus.
May be a boolean value, such as "true" or "false".
从我的测试中,重点是当用户使用&#34; next / previous&#34;导航到UI元素时。用户界面就像在软键盘或遥控设备(Android TV)上,或者当用户触摸并按住按钮而不释放它时。我不得不使用state_pressed = true和state_focused = true来呈现一个长按的UI drawable。
答案 4 :(得分:0)
要更改Button的背景颜色并使其在点击后保持不变,您只需:
以Kotlin和“材质按钮”为例:
ColorStateSelector文件(res / color / buttons_color_state.xml):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Red color for pressed state, the pressed state is changed back to normal button color after a certain short time, white in this case-->
<item android:color="#FF1744" android:state_pressed="true" />
<!-- Green color for this state, it's reserved for persistent color change-->
<item android:color="#00E676" android:state_selected="true" />
<!-- White for neutral default state-->
<item android:color="@android:color/white" />
</selector>
布局XML:
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonOption"
android:backgroundTint="@color/buttons_color_state.xml"
... />
Kotlin文件:
val buttonOption = view?.findViewById<MaterialButton>(R.id.buttonOption)
// Implement any "if" checks or other control checks here if necessary
buttonOption.isSelected = true
// now the button is Green!
好运!