【问题标题】:Default Button's methods默认按钮的方法
【发布时间】:2013-12-23 14:12:41
【问题描述】:

我想在onc​​lick按钮效果后获得类似于android中的默认效果,但有自己的颜色

默认按钮为白色或浅灰色 当我触摸按钮颜色改变片刻(橙色) 松开时,按钮颜色恢复原色(白色/浅灰色)

使用哪种方法来达到这种效果?

我使用 onTouchListener() 设置触摸按钮颜色 和 OnClickListener() 设置回原来的颜色

但是当我滚动组按钮(内部 ScrollView)时,当我触摸任何按钮时,颜色会发生变化,但当释放按钮颜色时不会变回。我应该使用哪种方法?我该如何解决?

///////////////// 我在值中创建了颜色并定义了 2 种颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#ffffff</color>
    <color name="blue">#004080</color>
</resources>

我在这个文件夹内创建新文件夹颜色和 button_state.xml

<?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"
        android:drawable="@color/blue" />
    <item android:state_focused="true"
        android:state_pressed="true"
        android:drawable="@color/white" />
</selector>

我在 xml 文件中为我的按钮分配代码

android:background="@color/button_states"

现在我的按钮没有背景了,但我不知道为什么

【问题讨论】:

    标签: java android


    【解决方案1】:

    根据状态创建定义按钮状态和按钮颜色的 xml 文件,例如项目中 res/color 文件夹中的 button_states.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
              android:drawable="@color/pressed_button_color"/>
        <item android:state_selected="true"
              android:drawable="@color/selected_button_color"/>
        <item android:drawable="@color/default_button_color"/>
    </selector>
    

    在 values/colors.xml 中定义这些颜色

    并在 Button 元素上的布局 xml 文件中使用它:

    android:background="@color/button_states"
    

    【讨论】:

    • 这是因为您在 button_states.xml 中使用了不同的选择器项目,我尝试将以下项目添加到选择器元素: 这对我有用,所以你应该考虑添加默认和state_pressed 项目
    • 是的,它现在完美运行,这是非常有用的解决方案。非常感谢
    【解决方案2】:

    在您的按钮的 xml 中,将其背景设置为以下

    android:background="?android:attr/selectableItemBackground"
    

    这将自动将颜色更改处理为android中的默认更改

    如果你想拥有自己的颜色,你需要做一个自定义选择器并将其设置为你的背景。像下面这样的东西应该可以工作:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:state_pressed="true" android:drawable="@drawable/list_selector_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/list_selector_focused" />
    <item android:drawable="@color/selector_background" />
    
    </selector>
    

    你的drawable会是这样的:

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    
    <solid android:color="@color/selector_background_pressed"/>
    
    </shape>
    

    不是 100% 肯定,但您可以直接在选择器中使用 @color/my_colour 而不是引用可绘制对象。但是这种方式肯定行得通

    【讨论】:

    • 嗯,我有错误,但它预计 11 lvl api 或更高,我必须使用 api 8
    • 创建一个像我发布的那样的自定义选择器应该适合你
    • 我创建了选择器但它不起作用,我在我的主题中解释了它
    • 像我在示例中那样创建您的选择器。您需要像我所做的那样为您的按下状态绘制一个drawable。您的可绘制对象需要位于 res/drawable 文件夹中,并像 @drawable/filename 一样引用。
    【解决方案3】:

    我建议您使用此在线tool。您只需要选择所需的颜色集,下载资源后将资源分别放入您的项目资源文件夹中,然后将主题应用于您在清单文件中的应用程序,名称为您在此在线工具上设置的名称(默认为“主题名称” AppTheme )

    <application android:debuggable="true" android:label="@string/app_name"android:theme="@style/AppTheme">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多