单击Android更改按钮样式资源

时间:2018-01-27 18:20:05

标签: android android-layout button

我还没有能够找到我想要做的事情,但我觉得它应该是一个如此常见的界面需要,必须有一种直接的方式来实现这一点,我才能做到这一点。我失踪了。

在我的style.xml中,我有两种按钮样式,一种标准"活跃"按钮和"非活动"按钮。

<style name="ButtonStandard">
    <item name="android:background">@color/colorGreen</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:padding">@dimen/element_padding</item>
</style>

<style name="ButtonInactive">
    <item name="android:background">@color/colorLight</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:padding">@dimen/element_padding</item>
</style>

我将一个按钮设置为ButtonStandard,另一个按钮设置为ButtonInactive。当我单击非活动按钮时,我想将其更改为使用ButtonStandard类型,反之亦然。我不想以编程方式单独设置样式,以防我决定稍后更改按钮样式,并且必须在每个位置更改它都是不可靠的。

activeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            activeButton.[somehowsetstyle](R.style.ButtonInactive);
            inactiveButton.[somehowsetstyle](R.style.ButtonStandard);
        }
    });

当用户点击按钮时,如何在这些样式之间切换?最重要的是不必在代码中设置特定样式,这只是imho的最后手段。

谢谢!

解决方案说明

通常我遵循下面的解决方案,但我将选择器创建为drawable并使用android:drawable代替,因为看起来按钮背景需要,即使只是指定颜色。我还使用了state_activated而不是启用,因此它只是更改按钮的外观而不会阻止点击。

<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" />

以XML格式

android:background="@drawable/selector_btn_bkg"
android:state_activated="false"

在Java中

myButton.setActivated(true);

1 个答案:

答案 0 :(得分:1)

您要找的是ColorStateList

抽拉/ 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>

my_view.xml

...
<Button
    android:id="@+id/my_button"
    android:enabled="false"
    android:background="@drawable/my_selector"/>

Java代码

onClick(View v){
    myButton.setEnabled(true);
}