ColorStateList是一个对象,它可以在可用于上取决于哪个被施加它小部件的窗口小部件的状态(例如按钮等)应用不同的颜色的XML文件定义。例如,按钮有很多状态(如(已按下,已聚焦或没有它们)),其他小部件状态(如启用,可检查,已选中等),使用颜色状态列表是一种无需使用按钮即可更改按钮颜色的好方法绘制形状或自定义图像。人们应该记住,颜色状态列表可以在任何使用颜色的地方使用。颜色状态列表以XML定义,并保存在res / color文件夹下。颜色状态列表的根元素是选择器,并且为每个要使用颜色和alpha属性定义颜色的状态定义了item元素。默认颜色应该是未定义特定状态的颜色时使用的最后一个元素。下面给出了一个示例GIF,以使我们对本文中要做的事情有一个了解。请注意,我们将使用Kotlin语言实施此项目。
方法
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:使用activity_main.xml文件
转到布局文件夹,然后在activity_main.xml文件中将ConstraintLayout更改为LinearLayout并使其方向垂直。添加按钮并切换到布局。以下是activity_main.xml文件的代码。
XML
XML
XML
Kotlin
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
// if button is already in selected state and now it is pressed
// again,then it will reach in not selected state and vice versa
button.isSelected != button.isSelected
}
buttonSwitch.setOnCheckedChangeListener { buttonView, isChecked ->
// if the switch is checked,then enable the button,else not
button.isEnabled = isChecked
}
}
}
步骤3:添加名为颜色的资源目录
将一个名为color的资源目录添加到res文件夹,并将根元素保留为选择器,因为我们要根据状态选择颜色。将两个名为button_text_color.xml和button_background_color.xml的资源文件添加到颜色资源目录。出于与上述相同的原因,将选择器保留为根元素。有关执行上述操作的信息,请参考以下图像和代码。
为了创建颜色资源文件,请右键单击res文件夹,单击“新建”,然后选择“ Android资源目录”。
现在,通过右键单击颜色目录并将选择器保留为根元素,在颜色资源目录中创建资源文件( button_text_color.xml和button_background_color.xml)。
下面是代码 button_background_color.xml文件。
XML格式
以下是button_text_color.xml文件的代码。
XML格式
步骤4:使用MainActivity.kt文件
转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。
科特林
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
// if button is already in selected state and now it is pressed
// again,then it will reach in not selected state and vice versa
button.isSelected != button.isSelected
}
buttonSwitch.setOnCheckedChangeListener { buttonView, isChecked ->
// if the switch is checked,then enable the button,else not
button.isEnabled = isChecked
}
}
}