Android Studio:如何通过代码为Button设置Drawable类型的文字颜色?
实现XML中
android:textColor="@drawable/text_blue_to_white"的Java等效代码 你遇到的问题很典型:Button.setTextColor(int)方法只接受颜色值整数,直接传入Drawable/ColorStateList的资源ID会被错误解析成颜色值,自然达不到预期效果。要实现和XML属性完全一致的点击变色逻辑,我们需要先正确加载对应的颜色状态列表,再绑定到Button上。
解决思路&代码修改
- 加载颜色状态列表:用
ContextCompat.getColorStateList()方法(兼容全Android版本),传入上下文和你的资源ID,它会自动解析drawable文件夹下的颜色状态XML文件。 - 绑定到Button:调用
btn.setTextColor()把加载好的ColorStateList对象传进去即可。
把你原代码里的btn.setTextColor(R.drawable.text_blue_to_white);替换成下面的代码:
// 加载颜色状态列表 ColorStateList textColorStateList = ContextCompat.getColorStateList(this, R.drawable.text_blue_to_white); // 设置给Button btn.setTextColor(textColorStateList);
修改后的完整循环代码片段
for (int i = 0; i < list.size(); i++) { Button btn = new Button(this); btn.setText(list.get(i).toString()); btn.setTag(list.get(i).toString()); btn.setId(i); btn.setBackgroundResource(R.drawable.strockbtn_white_to_roundbtn_white); // 替换原setTextColor调用,实现XML属性的等效逻辑 ColorStateList textColorStateList = ContextCompat.getColorStateList(this, R.drawable.text_blue_to_white); btn.setTextColor(textColorStateList); btn.setTextSize(15); btn.setTypeface(null, Typeface.BOLD); btn.setPadding(0,0,0,0); params.setMargins(150, 6, 150, 6); btn.setLayoutParams(params); btn.setOnClickListener(this); ll.addView(btn); buttons.add(btn); }
补充说明
你的text_blue_to_white.xml应该是一个颜色状态列表(ColorStateList),结构大概如下(放在res/drawable或res/color文件夹下都可以):
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按钮按下时的文字颜色 --> <item android:color="#FFFFFF" android:state_pressed="true"/> <!-- 默认状态下的文字颜色 --> <item android:color="#0066CC"/> </selector>
只要你的XML是这种状态选择器结构,上面的Java代码就能完美复现XML属性的点击变色效果。
内容的提问来源于stack exchange,提问作者waghydjemy
相关产品推荐
相关产品推荐

