border="0" width="298" height="52" src="//music.163.com/outchain/player?type=2&id=318092&auto=1&height=32">

Android中使用RadioButton代替ImageButton

画外音————好久没上来发文章了,这几个月一直忙着一些跟编程不沾边的事,拖了好久,现在还在持续中,顺利的话7月份应该能解放了。。今天偶尔上来写一段番外篇性质的心得发现。


之前搞的Android项目,作为底部导航工具栏,一直用的是普通的ImageButton,搭配几张漂亮的图片,写写监听器就完事,效果看下面的图,虽然简单,但是有一个不太好的缺点,那就是导航到新的页面的时候,都要手动处理这个按钮的点击状态(让它高亮底图)和其它按钮的点击状态(让之前的退出高亮),这个处理过程既繁琐又容易遗漏出错等等等等..

受同事启发,使用RadioGroup和RadioButton就能自动化的解决上面的问题,因为本质上一个RadioGroup内只允许一个RadioButton处于选择状态之下(高亮),点击了同一组的其它RadioButton,之前的RadioButton就会自动被处理掉,而且当前RadioButton选择状态会自动保留,根本不需要再像之前的ImageButton那样一个个写处理代码,既美观又环保。

想法很不错,动手开干,但是又发现了一个新问题:RadioButton的样式在不同的系统版本表现不一样!下面拿这个超萌的猪头来说明情况。

素材图片:

RadioButton布局脚本:

<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:button="@null"
android:drawablePadding="-20dp"
android:drawableTop="@drawable/cat" />

其中 android:button=”@null” 这句很重要,用来消除掉RadioButton标配的圆圈单选按钮!

而 android:drawablePadding=”-20dp” 是用来去掉标配分给RadioButton文本的空位,当图片素材画在了drawableTop上面时,对应的文本会出现在下方,如果不需要填入文本,就用这行代码去掉空位;如果选择画在drawableLeft的话,就不需要这一行。

不要小看这个,有时候button的background会把图片显示模糊,而使用drawable就只有 top,left,right,bottom之类的,所以这句话很重要

   <Buttonandroid:id="@+id/btn_timer"android:layout_width="0dp"android:layout_height="50dp"android:layout_weight="1"android:drawableTop="@mipmap/iconn_alarm_small"android:background="@null"android:drawablePadding="-20dp"/>

具体来说分两种情况,一种是API17(4.2.2)中的表现:

另外一种是API14(4.0)以及它之下的各版本(如API8)中的表现:

   

上面API14和API8的效果是一样的,跟API17对比很明显,就是图片的左边多了一个空位!!这个位置无论怎么调padding、margin之类的参数都无法完全消除掉,很恶心。

至于API17-API14之间到底是哪个系统版本成了分水岭,这个就不得而知了,笔主这边编译环境没有安装更多的版本了,也懒得去研究。

上面这个问题找了好久都没找到原因,甚至于笔主都漫无目的的百度搜索有木有针对不同系统版本使用不同布局文件的方法了…

理所当然的一个但是,笔主本着不依不饶的顽强精神再次检查RadioButton布局属性参数,幸运女神终于降临了,笔主发现一个隐藏已久的陷阱:background!! 这个属性在API17的时候是空的,但是  在API14以下竟然默认配置成了 @android:drawable/btn_radio_label_background !!!既然发现了问题,笔主就二话不说直接填上伟大的 @null ,F5刷新一下屏幕..果不其然,一切又回归自然了!

(左右那俩二货没有弄background,所以还是那副鸟样)

处理后的RadioButton布局代码是:

<RadioButtonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_weight="1"android:background="@null"android:button="@null"android:drawablePadding="-20dp"android:drawableTop="@drawable/cat" />

RadioGroup开始的整体代码是:(上面的RadioButton参数被我放到了style文件里面)

<RadioGroupandroid:id="@+id/radioGroup1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="50dp"android:orientation="horizontal" ><RadioButton style="@style/radioBut" /><RadioButton style="@style/radioBut" /><RadioButton style="@style/radioBut" />
</RadioGroup>

开头所说的选择的时候高亮状态,需要设置相应的selector处理图片素材,这里就不详细说明了。

至此,RadioButton已经能够透明的代替ImageButton了,向下兼容至API8,并带入自动标记高亮单项选择功能,做导航的话应该比单纯的ImageButton更具优势吧,呵呵。

ps. 因为需要动态增减RadioButton等原因,在代码中设置新RadioButton对象的属性可参考以下博文:

« 上一篇:Android中代码设置RadioButton的高端技巧
» 下一篇:Android-使用ViewFlipper实现轮番切换广告栏

RadioButton 图片居中问题相关推荐

  1. markdown 图片居中_Markdown更改字体、颜色、大小,插入表格等方法

    Markdown 通过简单标记语法,使普通文本内容具有一定格式.但它本身不支持修改字体.字号与颜色等功能的.一.更改字体大小.颜色.更改字体Markdown语法 效果如下: 二.更改字体大小.颜色.更 ...

  2. css 图片居中放大,不同比例图片居中缩放显示的三种方法

    效果 方法一动态给img标签src属性赋值来达到传入不同比例的图片时始终等比例缩放显示,兼容性最好 HTML代码 复制代码 CSS代码 .img-box{ /*限定图片盒子宽高*/ width:500 ...

  3. [转]div 让文字或图片居中

    本文转自:http://qsfwy.iteye.com/blog/250206 在div 中让 文字或图片居中,请参考以下代码1:- - - - - - - - - - - - - - - - - - ...

  4. html悬浮的图片居中,HTML/CSS:图片居中(水平居中和垂直居中)

    css图片水平居中 1.利用margin: 0 auto实现图片水平居中 利用margin: 0 auto实现图片居中就是在图片上加上css样式margin: 0 auto 如下: 2.利用文本的水平 ...

  5. git 裁切_图片居中裁切.html

    *{padding: 0;margin:0;} body{font-size: 14px;color: #000;line-height: 1.8;} .banner { width: 375px; ...

  6. html 怎么自动让图片居中显示,css中怎样让图片居中显示?

    在进行网页布局的时候,有时候图片的位置可能会影响整个页面的美观程度,所以对于图片的放置位置就得变化,那么,接下来的这篇文章将给大家来介绍关于图片在网页中如何使用css实现居中的方法,对于有需要的朋友来 ...

  7. CSDN博客图片居中问题解决方案

    图片居中: 非居中: 图片居中方法:在图片链接后加上#pic_center即可使图片居中

  8. 【CSDN】图片居中与调整大小

    今天写博客突然发现插入图片都靠右了,以前不都是居中的吗?于是乎搜索了下 "CSDN图片居中" ,没想到CSDN也支持调整图片大小,舒服了~ 图片位置 在图片地址最后加上对应的位置指 ...

  9. php悬浮图片,在JS中如何实现图片居中悬浮效果

    这篇文章给大家分享的是通过JS实现图片垂直居中悬浮,不跟随滚动条飘动的效果,有兴趣的朋友跟着学习下吧. 这篇文章我们是用JS实现一个图片悬浮的效果,在我们用鼠标下拉滚动的时候图片居中悬浮,不跟随滚动, ...

最新文章

  1. 英特尔蚕食AMD和NVIDIA?
  2. 现在没点硬核技术都不敢卖货了
  3. ios开发值json数据文件的存取
  4. zzUbuntu安装配置Qt环境
  5. Spring Boot 项目实现热部署
  6. c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...
  7. matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)
  8. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)
  9. Timer的schedule和scheduleAtFixedRate方法的区别解析(转)
  10. centos升级默认node版本
  11. 使用 /proc 文件系统
  12. eclipse没有java web,Java-我的Eclipse IDE中缺少Web服务选项
  13. NewtonJson 的一个例子
  14. python中idle什么意思_python中idle是什么意思
  15. iNav飞控AOCODARC-F7MINI固件编译
  16. 促销方式脑图(转载图灵学院)
  17. 织梦有哪些文件需要设置robot的Disallow呢?
  18. 华三模拟器启动设备失败【启动设备MSR36-20_1失败】
  19. 切换windows系统版本
  20. 如何高效进行无人机动力测试-电池效率

热门文章

  1. python系统函数教程_Python入门基础教程之Python内置函数
  2. JAVA淮安市教育局职业教研室技能竞赛计算机毕业设计Mybatis+系统+数据库+调试部署
  3. 对讲机可以带上飞机吗?
  4. 诚之和:自嗨锅能颠覆海底捞吗?
  5. 分享聚能聊向代码致敬,寻找你的第83行话题评论截图,得礼品咯!
  6. redis跨服务器迁移数据
  7. i5 10500和i7 8700哪个好
  8. 网络检测工具ping
  9. 震颤的主要表现就是手抖吗?
  10. 《安德的游戏》和《死者的代言人》