我还没有能够找到我想要做的事情,但我觉得它应该是一个如此常见的界面需要,必须有一种直接的方式来实现这一点,我才能做到这一点。我失踪了。
在我的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);
答案 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);
}