Button的“state_focused”状态是什么?

时间:2012-01-13 14:55:35

标签: android android-button

我希望按钮背景在单击按钮后保持特定颜色,并在按下其他按钮时再次更改颜色。我认为这是“以州为中心”的状态。

但是,按下或不按下按钮时,我似乎只有两个状态。

我是否正确理解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>

5 个答案:

答案 0 :(得分:42)

每当按钮专注于使用dpad或轨迹球时,

state_focused。使用触摸时,视图通常不会显示聚焦状态。

答案 1 :(得分:35)

这里有一个按钮状态示例:

enter image description here

fonte:http://developer.android.com/design/style/touch-feedback.html

答案 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的背景颜色并使其在点击后保持不变,您只需:

  1. 创建ColorStateSelector XML文件
  2. 将按钮的“ backgroundTint”属性设置为上述XML文件
  3. 将按钮的状态设置为所需的颜色状态文件中定义的状态

以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!

好运!