android TextView textcolor 动态设置selector不起作用

前两天做项目需要动态设置textview的颜色,这个颜色是一个selector控制的

设置后发现只显示默认颜色,按下等状态的颜色不起作用,于是翻了一下源码和文档

 

一开始我设置textview的字体颜色用的ColorStateList.valueOf();方法。

翻了一下文档:



 意思是,你传入的color即使是一个selector 最终也只返回一种颜色

所以,动态设置textview字体的selector的正确用法是:

ColorStateList csl = getResources().getColorStateList(textcolor);  
mTextView.setTextColor(csl);

 这样才能生效。

### Android TextView 样式设置的方法 在 Android 中,可以通过多种方式为 `TextView` 设置样式。以下是几种常见的实现方法: #### 1. **自定义字体** 可以使用 `Typeface.createFromAsset()` 方法加载自定义字体文件并将其应用于 `TextView`。这种方法允许开发者灵活地调整应用内的文字风格。 ```java // 加载自定义字体 Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/custom_font.ttf"); // 应用于TextView TextView textView = (TextView) findViewById(R.id.textview); textView.setTypeface(typeface); ``` 此代码片段展示了如何通过资产目录下的 `.ttf` 文件创建自定义字体,并将其分配给指定的 `TextView`[^1]。 --- #### 2. **点击状态样式的改变** 为了使 `TextView` 在不同状态下(如按下、选中等)显示不同的样式,可以利用 XML Selector 定义点击效果。这种方式通常用于按钮或其他交互控件上。 ```xml <!-- res/drawable/text_selector.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/colorPressed"/> <item android:state_focused="true" android:color="@color/colorFocused"/> <item android:color="@color/defaultColor"/> </selector> ``` 接着,在布局文件中引用该选择器作为 `TextView` 的文本颜色属性: ```xml <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" android:textColor="@drawable/text_selector" /> ``` 上述代码实现了当用户点击或聚焦于 `TextView` 时,其颜色会发生变化的效果[^2]。 --- #### 3. **动态设置 Drawable 图标及其大小** 如果希望在运行时向 `TextView` 添加图标(如顶部 drawable),则可通过编程方式进行配置。此外,还可以控制这些图标的尺寸。 ```java public class TextDrawable extends AppCompatTextView { public TextDrawable(Context context) { super(context); // 动态设置DrawableTop资源 Drawable drawable = ContextCompat.getDrawable(context, R.drawable.ic_top_icon); if (drawable != null) { int size = dpToPx(24); // 转换dp到px单位 drawable.setBounds(0, 0, size, size); } setCompoundDrawables(null, drawable, null, null); } private int dpToPx(int dp) { return Math.round(dp * getContext().getResources().getDisplayMetrics().density); } } ``` 这里展示了一个扩展类的例子,其中包含了将顶部图标设置为固定大小的功能[^3]。 --- #### 总结 综上所述,针对 `TextView` 的样式定制主要包括但不限于以下几个方面: - 使用自定义字体提升视觉体验; - 利用 StateListDrawable 实现交互反馈; - 编程手段精确管理附属图像的位置与比例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值