我正在使用getColor()
方法从资源中选择颜色。但是我发现还有另一种称为getColorStateList()
的方法。哪个易于使用,它们之间有什么区别?
答案 0 :(得分:2)
让我们假设您要 setBackgroundColor 到一个视图,例如 linearLayout 。 如果希望其背景色永久不变,则可以使用 getColor()设置某些颜色。 但是如果您希望其颜色更改不同状态和事件(例如按下状态或未按下状态),则需要设置 xml 文件,其中包含这些颜色更改任务的代码。
这是我在代码中所说的话
linearLayout.setBackgroundColor(getResources().getColor(R.color.red);
上面的代码行将linearLayout的永久颜色设置为红色。
linearLayout.setBackgroundTintList(getResources().getColorStateList(R.drawable.layout_background));
上面的这一行代码将在按下布局时将背景色设置为红色,而在不按下布局时将背景色设置为白色。
layout_background.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="@color/red" />
<item android:state_pressed="false"
android:color="@color/white" />
</selector>
答案 1 :(得分:0)
getColor() 返回与特定资源ID关联的颜色整数
getColorStateList() ColorStateList是从在应用程序资源目录的“ color”子目录目录中定义的XML资源文件创建的。 XML文件包含一个“选择器”元素,其中包含许多“项目”元素。例如:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:color="@color/sample_focused" />
<item android:state_pressed="true"
android:state_enabled="false"
android:color="@color/sample_disabled_pressed" />
<item android:state_enabled="false"
android:color="@color/sample_disabled_not_pressed" />
<item android:color="@color/sample_default" />
</selector>