如何在Color State List资源中指定背景颜色?

13 浏览
0 Comments

如何在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的属性值翻转,我会得到一个异常,提示:

... 标签需要'drawable'属性或定义可绘制的子标签

我到底漏掉了什么?为什么颜色状态列表作为文本颜色是可接受的,但作为背景颜色却不可接受?如何根据视图的状态指定视图的背景颜色?

0
0 Comments

问题的出现的原因:问题的提问者在使用ColorStateList资源中指定背景颜色时遇到了困难。他尝试将textColor定义为一个drawable而不是一个颜色值,并且认为这可能是问题的解决方法。他还指出资源类别是基于资源的类型,而不是它们所在文件夹的名称。

问题的解决方法:问题的提问者建议将textColor定义为一个drawable资源,而不是一个颜色值。他还提供了一个链接,供更多关于使用drawable资源的信息。他还指出他不知道为什么这个答案被标记为正确,因为问题的提问者在遵循Android文档指示时遇到了问题。他还表示对于这个被选择的答案不起作用感到惊讶。

以下是整理后的文章:

问题:如何在Color State List资源中指定背景颜色?

问题的提问者遇到了在Color State List资源中指定背景颜色时的困难。他尝试将textColor定义为一个drawable而不是一个颜色值,以解决这个问题。然而,他对此表示了惊讶,因为资源类别是基于资源的类型,而不是它们所在文件夹的名称。

为了解决这个问题,问题的提问者建议将textColor定义为一个drawable资源,而不是一个颜色值。他还提供了一个链接,供更多关于使用drawable资源的信息。他还指出他不知道为什么这个答案被标记为正确,因为问题的提问者在遵循Android文档指示时遇到了问题。他还表示对于这个被选择的答案不起作用感到惊讶。

希望这个整理的信息能对遇到相同问题的人们有所帮助。

0
0 Comments

app:background是一种支持的变体,它允许直接使用颜色状态列表作为背景。在Android 10+版本中,android:background也可以使用。然而,使用这种方法时,背景颜色并没有发生改变,尽管代码可以编译通过。看起来似乎必须在drawable文件夹中使用状态列表来实现背景颜色的改变。

0
0 Comments

问题的原因是在使用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方法。

这个问题确实令人恼火,但感谢您确认了我的猜想。

0