(转)RadioButton左侧显示文字,右侧显示按钮时文字不靠边的问题解决
作者: 发布日期:2014-02-13 21:00:45
项目中有一个这样的需求:
下面三行点击某行即选中,颜色变深。自然的想到使用RadioButton因此决定使用RadioButton和RadioButton实现。
1、RadioButton实现上述效果
01.
<RadioButton
02.
android:id=
"@+id/rbAll"
03.
android:layout_width=
"match_parent"
04.
android:layout_height=
"wrap_content"
05.
android:button=
"@null"
06.
android:drawableRight=
"@drawable/selector_tb"
07.
android:text=
"测试条目一"
08.
android:textColor=
"@android:color/primary_text_light"
09.
android:textSize=
"14sp"
/>
这个是RadioButton的实现:首先android:button="@null",这个用于隐藏RadioButton默认的按钮;android:drawableRight="@drawable/selector_tb"这个用于显示自己定义的按钮,也就是上图右侧的按钮,当然,如果在左侧,你可以设置android:drawableLeft="@drawable/selector_tb"等;然后就是文字的属性。这样就设置完毕了。android:drawableRight="@drawable/selector_tb"中的selector_tb是一个选择器,代码如下:
1.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
3.
<item android:drawable=
"@drawable/ic_rb_press"
android:state_checked=
"true"
/>
4.
<item android:drawable=
"@drawable/ic_rb_unpress"
android:state_checked=
"false"
/>
5.
</selector>
完整的代码如下:
布局文件activity_main.xml:
03.
android:layout_width=
"match_parent"
04.
android:layout_height=
"match_parent"
05.
android:orientation=
"vertical"
06.
android:background=
"@android:color/white"
07.
tools:context=
".MainActivity"
>
08.
09.
<TextView
10.
android:layout_width=
"wrap_content"
11.
android:layout_height=
"wrap_content"
12.
android:text=
"@string/hello_world"
/>
13.
14.
<RadioGroup
15.
android:id=
"@+id/rgRight"
16.
android:layout_width=
"match_parent"
17.
android:layout_height=
"wrap_content"
18.
android:layout_marginTop=
"8dp"
19.
android:orientation=
"vertical"
>
20.
21.
<RadioButton
22.
android:id=
"@+id/rbAll"
23.
android:layout_width=
"match_parent"
24.
android:layout_height=
"wrap_content"
25.
android:background=
"@android:color/white"
26.
android:button=
"@null"
27.
android:drawableRight=
"@drawable/selector_tb"
28.
android:text=
"测试条目一"
29.
android:textColor=
"@android:color/primary_text_light"
30.
android:textSize=
"14sp"
/>
31.
32.
<RadioButton
33.
android:id=
"@+id/rbLimit"
34.
android:layout_width=
"match_parent"
35.
android:layout_height=
"wrap_content"
36.
android:background=
"@android:color/white"
37.
android:button=
"@null"
38.
android:drawableRight=
"@drawable/selector_tb"
39.
android:text=
"测试条目二"
40.
android:textColor=
"@android:color/primary_text_light"
41.
android:textSize=
"14sp"
/>
42.
43.
<RadioButton
44.
android:id=
"@+id/rbNone"
45.
android:layout_width=
"match_parent"
46.
android:layout_height=
"wrap_content"
47.
android:button=
"@null"
48.
android:drawableRight=
"@drawable/selector_tb"
49.
android:text=
"测试条目三"
50.
android:textColor=
"@android:color/primary_text_light"
51.
android:textSize=
"14sp"
/>
52.
</RadioGroup>
53.
54.
</LinearLayout>
MainActivity.java:
01.
public
class
MainActivity
extends
Activity
implements
OnCheckedChangeListener {
02.
private
RadioGroup rgRight;
03.
private
RadioButton rbAll, rbLimit, rbNone;
04.
05.
@Override
06.
protected
void
onCreate(Bundle savedInstanceState) {
07.
super
.onCreate(savedInstanceState);
08.
setContentView(R.layout.activity_main);
09.
10.
rgRight = (RadioGroup) findViewById(R.id.rgRight);
11.
rgRight.setOnCheckedChangeListener(
this
);
12.
rbAll = (RadioButton) findViewById(R.id.rbAll);
13.
rbLimit = (RadioButton) findViewById(R.id.rbLimit);
14.
rbNone = (RadioButton) findViewById(R.id.rbNone);
15.
}
16.
17.
@Override
18.
public
void
onCheckedChanged(RadioGroup group,
int
checkedId) {
19.
switch
(checkedId) {
20.
case
R.id.rbAll:
21.
radioButtonInit();
22.
rbAll.setTextColor(getResources().getColor(android.R.color.secondary_text_dark));
23.
break
;
24.
case
R.id.rbLimit:
25.
radioButtonInit();
26.
rbLimit.setTextColor(getResources().getColor(android.R.color.secondary_text_dark));
27.
break
;
28.
case
R.id.rbNone:
29.
radioButtonInit();
30.
rbNone.setTextColor(getResources().getColor(android.R.color.secondary_text_dark));
31.
break
;
32.
default
:
33.
break
;
34.
}
35.
}
36.
37.
private
void
radioButtonInit() {
38.
rbAll.setTextColor(getResources().getColor(android.R.color.primary_text_light));
39.
rbLimit.setTextColor(getResources().getColor(android.R.color.primary_text_light));
40.
rbNone.setTextColor(getResources().getColor(android.R.color.primary_text_light));
41.
}
42.
43.
}
2、问题
上面的代码运行后效果如下:
上面的Hello world!是居左的,但是下面的文字却怎么都不能靠边。试了各种方法都不行。
最后,无意中给RadioButton添加一个backgroud属性即可:
01.
<RadioButton
02.
android:id=
"@+id/rbAll"
03.
android:layout_width=
"match_parent"
04.
android:layout_height=
"wrap_content"
05.
android:background=
"@android:color/white"
06.
android:button=
"@null"
07.
android:drawableRight=
"@drawable/selector_tb"
08.
android:text=
"测试条目一"
09.
android:textColor=
"@android:color/primary_text_light"
10.
android:textSize=
"14sp"
/>
最后实现了所需效果。
3、总结
虽然效果实现了,但是这个问题一直不明白为什么,怀疑可能是RadioButton没有真正的match_parent。因此写了下面的测试代码:
01.
<RadioGroup
02.
android:id=
"@+id/rgRight"
03.
android:layout_width=
"match_parent"
04.
android:layout_height=
"wrap_content"
05.
android:layout_marginTop=
"8dp"
06.
android:orientation=
"vertical"
>
07.
08.
<RadioButton
09.
android:id=
"@+id/rbAll"
10.
android:layout_width=
"match_parent"
11.
android:layout_height=
"wrap_content"
12.
android:layout_margin=
"4dp"
13.
android:button=
"@null"
14.
android:drawableRight=
"@drawable/selector_tb"
15.
android:text=
"测试条目一"
16.
android:textColor=
"@android:color/primary_text_light"
17.
android:textSize=
"14sp"
/>
18.
19.
<RadioButton
20.
android:id=
"@+id/rbAll"
21.
android:layout_width=
"match_parent"
22.
android:layout_height=
"wrap_content"
23.
android:layout_margin=
"4dp"
24.
android:paddingLeft=
"0dp"
25.
android:button=
"@null"
26.
android:drawableRight=
"@drawable/selector_tb"
27.
android:text=
"测试条目一"
28.
android:textColor=
"@android:color/primary_text_light"
29.
android:textSize=
"14sp"
/>
30.
31.
<RadioButton
32.
android:id=
"@+id/rbLimit"
33.
android:layout_width=
"match_parent"
34.
android:layout_height=
"wrap_content"
35.
android:button=
"@null"
36.
android:drawableRight=
"@drawable/selector_tb"
37.
android:paddingLeft=
"4dp"
38.
android:text=
"测试条目二"
39.
android:textColor=
"@android:color/primary_text_light"
40.
android:textSize=
"14sp"
/>
41.
42.
<RadioButton
43.
android:id=
"@+id/rbNone"
44.
android:layout_width=
"match_parent"
45.
android:layout_height=
"wrap_content"
46.
android:button=
"@null"
47.
android:drawableRight=
"@drawable/selector_tb"
48.
android:padding=
"0dp"
49.
android:text=
"测试条目三"
50.
android:textColor=
"@android:color/primary_text_light"
51.
android:textSize=
"14sp"
/>
52.
53.
<RadioButton
54.
android:id=
"@+id/rbNone"
55.
android:layout_width=
"match_parent"
56.
android:layout_height=
"wrap_content"
57.
android:background=
"@android:color/white"
58.
android:button=
"@null"
59.
android:drawableRight=
"@drawable/selector_tb"
60.
android:text=
"测试条目三"
61.
android:textColor=
"@android:color/primary_text_light"
62.
android:textSize=
"14sp"
/>
63.
</RadioGroup>
运行后效果如下:
通过对比,感觉应该是左面有padding。但是,为什么设置background也行呢?高手请指点,谢谢~~
(转)RadioButton左侧显示文字,右侧显示按钮时文字不靠边的问题解决的更多相关文章
- ifram 实现左侧菜单,右侧显示内容
一般都是左侧的导航栏中的a标签中写一个target(a标签有target属性), 右侧的div标签中写一个iframe,在iframe中有name的属性,在左侧a标签中的target写上iframe中 ...
- C# 窗体 类似framest 左侧点击右侧显示 左侧菜单右侧显示
首先托一个splitContainer调节大小位置 然后进行再新创建一个窗体名为add 在左侧拖入button按钮 进入代码阶段 更改属性 public Main() { InitializeComp ...
- 基于jQuery左侧小图滚动右侧大图显示代码
今天给大家分享一款 jQuery左侧小图滚动右侧大图显示代码是一款基于jQuery实现的左侧滚动图片点击大图查看效果代码.该实例适用浏览器:IE8.360.FireFox.Chrome.Safari. ...
- Yii框架里用grid.CGridView调用pager扩展不显示最后一页按钮的解决
有如下一例,调用zii.widgets.grid.CGridView显示Blog信息,代码如下: $this->widget('zii.widgets.grid.CGridView', arra ...
- C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字 上一篇实现了把文字绘制到OpenGL窗口,但实质上只是把含有文字的贴图贴到矩形模型上.本篇我们介绍用Poi ...
- easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字
先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...
- 在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字
在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是c ...
- jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
1.效果及功能说明 hover事件制作产品图片鼠标滑过图片半透明,标题文字从左到右滑动动画移动显示隐藏 2.实现原理 首先把效果都隐藏,然后定义一个伪类来触发所有的效果,接下来当触发伪类后会有一个遍历 ...
- ActionBar只显示图标不显示文字
问题:ActionBar菜单项android:showAsAction设置为android:showAsAction="always|withText"或者android:show ...
随机推荐
- OSTU二值化算法
介绍 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个 ...
- golang learning
开发用py和go 入职前学了几天py入职后看的代码也是py 现在终于还是要学go了 初体验:感觉和c py都很像 入门语法看起来很简单的样子 学了py之后现在各种随意 需要多注意 在函数传参的时候 c ...
- Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解 .
http://blog.csdn.net/lucherr/article/details/8498400 看资料的时候经常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家: 这些术语都是 ...
- java--何时处理Exception(哪一个层级),包装的基础类处理任务尽可能简洁,写入日志,检查null等运行时异常
1. 运行时异常和受检异常 2. 提前预防运行时异常.最常发生的是NPE,而检查NPE是程序员的基本职责.其他的,如除0等运行时异常的检查,需要程序员仔细检查,每个函数都得检查(除非可以确定不会有空指 ...
- Win10/Server2016镜像集成离线补丁
Win10镜像集成离线补丁 因为正常安装系统后再打补丁比较漫长,可以事先做好打过补丁的iso,备将来使用. 以管理员身份运行cmd,然后通过dism提取.挂载.集成补丁.保存install.wim镜像 ...
- 【scala】apply和update
我们在使用scala的时候经常会用到对象的apply方法和update方法. 虽然我们表面没有察觉,但是实际上两个方法都会遵循相关约定被调用. apply apply方法的约定:用括号传递给变量(对象 ...
- .html() .text() .val() 的区别
.html()用为读取和修改元素的HTML标签(包括其Html标签) .text()用来读取或修改元素的纯文本内容 (包括其后代元素) .val()用来读取或修改表单元素的value值.(只能用于表单 ...
- Prism开发人员指南5-WPF开发 Developer's Guide to Microsoft Prism Library 5.0 for WPF (英汉对照版)
April 2014 2014四月 Prism provides guidance in the form of samples and documentation that help you e ...
- js不执行的问题
项目中有两个页面,调用的一个js引用都正确,一个js能用,一个没反应,瞅了半天 没看出什么名堂.最后发现一个页面只有一个 <script type="text/javascript&q ...
- LeetCode OJ:Divide Two Integers(两数相除)
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...