在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色
今天由于公司项目需求,须要实现一种类似tab的选项卡,当时直接想到的就是使用RadioGroup和RadioButton来实现。
这种方法全然没问题。可是在后来的开发过程中,却遇到了一些困扰非常久的小困难。大概需求是:在代码中。动态的获取tab的个数,然后初始化RadioGroup,每个tab相应一个RadioButton,即加入一个tab就要向RadioGroup中add一个RadioButton,然后在button选中时要更改文字颜色。由于是动态加入,所以无法在xml中配置了RadioButton和设置selector来更改文字颜色了。
以下贴上部分代码:
int size = lvl1.size();
for (int i = 0; i < size; i++) {
Question q = lvl1.get(i);
RadioButton btn = getRadioButton(q, i);
radioGroup.addView(btn,
new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT,
RadioGroup.LayoutParams.MATCH_PARENT, 1));
if(i == 0){
subLevel.clear();
subLevel.addAll(q.getSubLevel());
adapter.notifyDataSetChanged(); // 数据变化了
btn.setChecked(true);
}
}
先看看上面这段代码。我通过getRadioButton()来动态生成一个RadioButton。然后调用addView()加入到RadioGroup中,此时,须要注意的是:
radioGroup.addView(btn,
new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT,
RadioGroup.LayoutParams.MATCH_PARENT, 1));
方法中指定了RadioButton的布局參数,要注意。这里一定要使用RadioGroup.LayoutParams这个类来指定RadioButton的布局參数,假设你使用其它的比如:
LinearLayout.LayoutParams、ViewGroup.LayoutParams等类,将不会起作用!!
这就是我第一个遇到的小坑。为什么会导致这样呢?由于在RadioGroup中,它已经重写了LayoutParams了。当时我大概看了一下源代码。预计就是在这里面有变动造成的。
再来看看,getRadioButton这种方法:
private RadioButton getRadioButton(Question q, int index)
{
RadioButton btn = new RadioButton(context);
btn.setId(index);
Drawable d = context.getResources().getDrawable(R.drawable.radiogroup_tab_selector);
d.setBounds(0, 25, 150, 55);
btn.setButtonDrawable(R.drawable.transparent);
btn.setCompoundDrawables(null, null, null, d);
btn.setText(q.getQs_content());
btn.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
/* 在代码中使用selector来改变选中button文字颜色。须要使用getColorStateList(int id),这种方法来解析我们定义selector。
使用getColor()是解析不出来的。 */
btn.setTextColor(context.getResources().getColorStateList(R.color.acs_tab_textcolor_selector));
return btn;
}
上面代码中有两个地方要注意:
1. 在调用setButtonDrawables()时。须要先调用了Drawable的setBounds()方法,这样设置的Drawable才可以显示出来
2. 在代码中。使用selector来动态改变RadioButton选中时文字颜色。须要使用getColorStateList(int id)。这种方法来解析我们定义selector,使用getColor()是解析不出来的。
总结:尽管上面我是以RadioButton作为样例,可是,仅仅要是继承TextView的控件,须要在代码中动态改变文本颜色。都须要注意上面提到的地方。
在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色的更多相关文章
- 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常
代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0
- 创建一个带模版的用户控件 V.3
再重构此篇<创建一个带模版的用户控件 V.2>http://www.cnblogs.com/insus/p/4164149.html 让其它动态实现header,Item和Footer. ...
- WPF自学入门(六)WPF带标题的内容控件简单介绍
在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...
- 创建一个带模版的用户控件 V.2
前面有做练习<创建一个带模版的用户控件>http://www.cnblogs.com/insus/p/4161544.html .过于简化.通常使用数据控件Repeater会有网页写好He ...
- DS控件库 在Combobox中嵌入远程桌面
本示例演示DS开放式下拉列表控件中加入一个RDP远程桌面控件. 先在VS工具箱中添加COM控件Microsoft RDP Client Control,后面的Version版本可以适当高点. 然后将R ...
- VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。
原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...
- 【WinRT】让控件飞,WinRT 中实现 web 中的 dragable 效果
由于在 xaml 体系中,控件没有传统 WebForm 中的 Left.Top.Right.Bottom 这些属性,取而代之的是按比例(像 Grid)等等的响应布局.但是,传统的这些设置 Left.T ...
- C# winform中自定义用户控件 然后在页面中调用用户控件的事件
下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)
Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报 分类: Halco ...
随机推荐
- 紫书 例题 10-20 UVa 10900(连续概率)
分两类,当前第i题答或不答 如果不回答的话最大期望奖金为2的i次方 如果回答的话等于p* 下一道题的最大期望奖金 那么显然我们要取最大值 所以就要分类讨论 我们设答对i题后的最大期望奖金为d[i] 显 ...
- 洛谷——P1965 转圈游戏
https://www.luogu.org/problem/show?pid=1965 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n- ...
- spring的PropertyPlaceholderConfigurer不生效的问题
经常出现这种问题,每次都debug知道原因,但每次都会忘记,所以记录一下. 原因:maven项目中使用了非maven管理的jar包(通过systemPath引用),这些jar包没有放在${projec ...
- linux内核计算时间差以及jiffies溢出
jiffies是每一个时钟中断,都会加1.这就导致一个问题.不管jiffies(一般来说是unsigned long类型)多少个字节,总有溢出的时候. 更极端的时候.当期jiffies是0xfffff ...
- 关键字&标识符
关键字:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 保留字: 标识符:凡是自己可以起名字的地方都叫标识符 命名的规则:(一定要遵守,不遵守就会报编译的错误)由26个英文字母大小写,0- ...
- C++包含头文件时尖括号和双引号区别
原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作# ...
- caioj 1063 动态规划入门(一维一边推1:美元和马克)
这道题一开始我是这么想的 最后的答案肯定是某次的马克换回来的,但这个该怎么确定?? 实际上应该把范围缩小,只看最后一次和倒数第二次之间有什么联系. 可以发现,只有两种可能,最后一天换或者不换.换的话就 ...
- Redis 数据持久化的方案的实现
原文:Redis 数据持久化的方案的实现 版权声明:m_nanle_xiaobudiu https://blog.csdn.net/m_nanle_xiaobudiu/article/details/ ...
- HDU——T 1556 Color the ball
http://acm.hdu.edu.cn/showproblem.php?pid=1556 Time Limit: 9000/3000 MS (Java/Others) Memory Limi ...
- Eclipse+PyDev解决中文输入和注释问题
Eclipse的设置 window->preferences->general->editors->text editors->spelling->encoding ...