我正在使用drawables
来很好地设置我的按钮样式,除了按钮中的文本颜色外,它工作正常。
我在state_enabled="false"
中定义了一个selector
项,并使用setEnabled
为我提供了正确的按钮样式,但是我必须通过相当多的循环才能获得不同的文本颜色。例如,此代码不起作用(禁用时显示无或黑色文本,启用时显示黑色):
public void setButtonsEnabled(boolean enable) {
btnAccept.setEnabled(enable);
btnDecline.setEnabled(enable);
int color = R.color.White;
if (!enable) {
color = R.color.DarkGray;
}
btnAccept.setTextColor(color);
btnDecline.setTextColor(color);
}
答案 0 :(得分:2)
我找到了解决方案。
关键在于将TextColor设置为selector
中的res/colors
:
android:textColor="@color/button_text"
android:background="@drawable/button_selector"
对于后台选择器我使用了这个:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/btn_buddy_enabled"></item>
<item android:state_enabled="false" android:drawable="@drawable/btn_buddy_disabled"></item>
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/btn_buddy_clicked"></item>
</selector>
textColor选择器是这样的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="false" android:color="@color/White"></item>
<item android:state_enabled="false" android:color="@color/Gray"></item>
<item android:state_enabled="true" android:state_pressed="true" android:color="@color/White"></item>
</selector>
只需拨打setEnabled()
即可让一切正常。
答案 1 :(得分:1)
您使用的颜色值不正确。 R.color.White返回值的资源ID,而不是值本身。尝试使用Color.WHITE或getResources()。getColor(R.color.White)
答案 2 :(得分:0)
你签出了ColorStateLists
吗?他们非常棒。因此,基本上将Drawable
选择器的所有想法应用于一组颜色。
创建一个名为 [Your Project] / res / colors / 的文件夹,然后在其中放入一个名为button_color.xml(或其他)的xml文件。
<强> button_color.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
>
<!-- Any Enabled button, gets White Text -->
<item
android:color="@color/White"
android:state_enabled="true" />
<!-- Buttons with any other state, get DarkGray Text -->
<item
android:color="@color/DarkGray"/>
</selector>
然后对于TextView
,您可以执行类似mTextView.setTextColor(R.color.button_color);
之类的操作。此时不需要if / else类型的逻辑,selector
会执行此操作为了你。选择器将汇总到颜色资源中,但实际生成的类称为ColorStateList
,以防您在其他文档中找到它。