如何在Color State List资源中指定背景颜色?
如何在Color State List资源中指定背景颜色?
为了给我的应用程序用户指示当前聚焦的字段,我试图根据当前状态更改一些字段的背景颜色,然而,我在理解Android的颜色状态列表资源时遇到了问题:
我找到了一个示例(抱歉,URL不再可用),如果我尝试完全相同的操作,即如果我想要调整textColor,事情是有效的。然而,如果我尝试稍微不同的操作,例如调整background颜色,事情不起作用,我不明白为什么?为什么如此不一致?
为了更容易理解我的尝试,我附加了我的杂项.xml文件:
AndroidManifest.xml
文件:
Test-Activity
:
package mmo.android.test; import android.app.Activity; import android.os.Bundle; public class Test extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
res/values/strings.xml
:
Hello World, Test! Test
res/color/button_test_color.xml
:
最后,我的res/layout/main.xml
文件:
如果我像这里展示的那样运行,它是有效的,即我得到一个按钮,其文本颜色根据按钮的聚焦、按下等状态而改变。
如果我取消注释下面的按钮,只是将textColor和background的属性值翻转,我会得到一个异常,提示:
...
我到底漏掉了什么?为什么颜色状态列表作为文本颜色是可接受的,但作为背景颜色却不可接受?如何根据视图的状态指定视图的背景颜色?
问题的出现的原因:问题的提问者在使用ColorStateList资源中指定背景颜色时遇到了困难。他尝试将textColor定义为一个drawable而不是一个颜色值,并且认为这可能是问题的解决方法。他还指出资源类别是基于资源的类型,而不是它们所在文件夹的名称。
问题的解决方法:问题的提问者建议将textColor定义为一个drawable资源,而不是一个颜色值。他还提供了一个链接,供更多关于使用drawable资源的信息。他还指出他不知道为什么这个答案被标记为正确,因为问题的提问者在遵循Android文档指示时遇到了问题。他还表示对于这个被选择的答案不起作用感到惊讶。
以下是整理后的文章:
问题:如何在Color State List资源中指定背景颜色?
问题的提问者遇到了在Color State List资源中指定背景颜色时的困难。他尝试将textColor定义为一个drawable而不是一个颜色值,以解决这个问题。然而,他对此表示了惊讶,因为资源类别是基于资源的类型,而不是它们所在文件夹的名称。
为了解决这个问题,问题的提问者建议将textColor定义为一个drawable资源,而不是一个颜色值。他还提供了一个链接,供更多关于使用drawable资源的信息。他还指出他不知道为什么这个答案被标记为正确,因为问题的提问者在遵循Android文档指示时遇到了问题。他还表示对于这个被选择的答案不起作用感到惊讶。
希望这个整理的信息能对遇到相同问题的人们有所帮助。
问题的原因是在使用Color State List时,android:background
属性不起作用。解决方法是创建一个State List Drawable,然后将颜色资源添加到res/values/colors.xml
文件中。使用android:drawable
代替android:color
,Android会将颜色资源转换为drawable。最后,通过/button_test_background
引用这个drawable。
Color State List对于android:textColor
可以正常工作,但对于android:background
需要使用上述的State List Drawable方法。
这个问题确实令人恼火,但感谢您确认了我的猜想。