Android 安卓更改按钮样式资源点击
我还没能找到我想在上面做什么,但我觉得这应该是一个非常常见的接口需要,必须有一个简单的方法来完成这一点,我错过了 在my style.xml中,我有两种按钮样式,一种是标准的“活动”按钮,另一种是“非活动”按钮 当用户单击按钮时,如何在这些样式之间进行更改?最重要的是不必在代码中设置特定的样式,这只是imho的最后手段 谢谢 解决方案说明 通常我遵循下面的解决方案,但是我创建了一个可绘制的选择器,并使用了Android 安卓更改按钮样式资源点击,android,android-layout,button,Android,Android Layout,Button,我还没能找到我想在上面做什么,但我觉得这应该是一个非常常见的接口需要,必须有一个简单的方法来完成这一点,我错过了 在my style.xml中,我有两种按钮样式,一种是标准的“活动”按钮,另一种是“非活动”按钮 当用户单击按钮时,如何在这些样式之间进行更改?最重要的是不必在代码中设置特定的样式,这只是imho的最后手段 谢谢 解决方案说明 通常我遵循下面的解决方案,但是我创建了一个可绘制的选择器,并使用了android:drawable,因为按钮背景似乎需要它,即使只是指定了一种颜色。我还使用了
android:drawable
,因为按钮背景似乎需要它,即使只是指定了一种颜色。我还使用了state\u activated
而不是enabled,这样它只会改变按钮的外观,不会阻止点击
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="false"
android:drawable="@color/colorPrimaryDark" />
<item android:state_activated="true"
android:drawable="@color/colorGreen" />
<item android:drawable="@color/colorGreen" />
在Java中
myButton.setActivated(true);
你要找的是 drawable/my_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:color="@color/enabled_color"/>
<item android:color="@color/enabled_color"
android:state_enabled = "true"/>
<item android:color="@color/disbaled_color"
android:state_enabled = "false"/>
</selector>
有趣的如果我想更改按钮的颜色以及按钮内文本的颜色,我需要创建两个不同的可绘制文件吗?启用状态显示为完全禁用按钮,因此一旦按钮设置为禁用,我就无法在打开或其他按钮之间切换。无法理解您的评论。如果我将按钮设置为
android:enabled=“false”
或`myButton.setEnabled(true);`这个按钮不再响应,所以我不能再次点击它来重新激活它和停用另一个。是的,这只是一个例子。您的问题是关于如何根据不同的状态更改视图的样式。您必须根据您的要求修改代码。
android:background="@drawable/selector_btn_bkg"
android:state_activated="false"
myButton.setActivated(true);
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:color="@color/enabled_color"/>
<item android:color="@color/enabled_color"
android:state_enabled = "true"/>
<item android:color="@color/disbaled_color"
android:state_enabled = "false"/>
</selector>
...
<Button
android:id="@+id/my_button"
android:enabled="false"
android:background="@drawable/my_selector"/>
onClick(View v){
myButton.setEnabled(true);
}