如何在4.X版本实现Switch在5.X的效果
来源:互联网 发布:mac后台怎么关闭 编辑:程序博客网 时间:2024/06/06 15:02
如何在4.X版本实现Switch在5.X的效果
前言
这个需求可能不多,不过本篇博客主旨是希望能通过记录实现这个需求的过程,给同学们一些解决问题的思路。
简单描述需求
首先应用是跑在4.4的系统上的,然后设计师大人设计了一个效果,如下图:
图片1
但是在4.X的版本是这样的,如图
图片2
我自定义的结果是介于两者之间,如图
图片3
然后我就开始各种百度。。。结果还真是让人悲伤,大家的文章基本上都是定义thumb和track来实现如下图的样式:
图片4
显然这不能满足我们的设计需求。百度无果,也不能说做不了(毕竟我也是脸皮薄(偷笑)),然后就想既然5.X可以实现,那就看看源码啦。
下面是重要源码分析
首先我这是宽度不够,就是设计图是一个圆形图标,但是我的是一个长条
private int mThumbWidth;//这个是上面滑块的宽度,因为我的滑块是长条,所以我在这里入手,看看这个宽度是怎么计算来的//然后一搜就到了这个菊花,mThumbWidth是取得maxTextWidth和thumbWidth中较大值 mThumbWidth = Math.max(maxTextWidth, thumbWidth);//再去找这两个宽度哪里来的,这里赋值,然后发现maxTextWidth是mOnLayout.getWidth()和mOffLayout.getWidth()中较大的值,还有mThumbTextPadding*2(就是左右两面的padding) final int maxTextWidth; if (mShowText) { maxTextWidth = Math.max(mOnLayout.getWidth(), mOffLayout.getWidth()) + mThumbTextPadding * 2; } else { maxTextWidth = 0; }//下面继续找mOnLayout和mOffLayout了,这两个值来自于mTextOn和mTextOffif (mShowText) { if (mOnLayout == null) { mOnLayout = makeLayout(mTextOn); } if (mOffLayout == null) { mOffLayout = makeLayout(mTextOff); } }//mTextOn和mTextOff,终于到这里了,其实就是我们设置的文字了,通过如下两个属性 android:textOff=""和android:textOn=""mTextOn = a.getText(com.android.internal.R.styleable.Switch_textOn); mTextOff = a.getText(com.android.internal.R.styleable.Switch_textOff);
解决方案1
既然这个文字可以影响的话,那就简单啦,多写几个空格不就好了,这里就得到解决方案了。
继续源码分析
上面我们还有一个参数也是可以影响到最终的mThumbWidth的,还记得么?没错就是mThumbTextPadding啦,字面意思很好理解吧,就是文字的padding值了,下面看看源码啦
//只是一个属性啊,这就简单了,其实对应的就是android:thumbTextPadding=""mThumbTextPadding = a.getDimensionPixelSize( com.android.internal.R.styleable.Switch_thumbTextPadding, 0);
解决方案2
这就不多说了,简单设置一下就行了啊。
总结
这里主要是介绍一种解决问题的方式,问题滑块宽度不够—>去源码中看哪些值影响—>设置可影响的值—>达到目的
这也鼓励大家多看源码,难度大的看不懂,可以从简单的入手,无论如何,这也是进入高级开发的一个必经路,—–在此共勉
阅读全文
0 0
- 如何在4.X版本实现Switch在5.X的效果
- 【cocos2d-x 初级教程之一 2.x版本 】如何在多个移动平台上创建新的cocos2d-x项目
- Unity3D 4.x如何实现动画的Ping Pong效果
- 如何在cocos2d-x实现高效的mask(遮罩)
- 如何在cocos2d-x实现高效的mask(遮罩)
- 在Greenplum 4.x版本使用dblink
- 解决在ios8中, cocos2dx 2.x版本里CCClippingNode没有效果的问题
- [Cocos2d-x]在Cocos2d-x 3.x版本中如何通过WebSocket连接服务器进行数据传输
- [Cocos2d-x]在Cocos2d-x 3.x版本中如何通过WebSocket连接服务器进行数据传输
- 如何在lion系统下安装Xcode 3.2.x版本
- cocos2dx 3.x版本 技能冷却效果的实现
- 在Struts1.x中用actionForm实现 request.getParameterValues("")效果;
- 如何在Mac OS X上面指定Eclipse启动时用指定的某一版本JDK?
- 如何在arcmap10.0以及以上版本中使用arcgis9.X系列的编辑捕捉模式
- 【教程】如何在2d-x中加载CocosStudio2.0版本生成的数据
- 如何在xcode中同时安装两个版本的cocos2d-x
- quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现
- 配置在Tomcat4.1.X以上版本的缓存问题
- 京东内推:最大连续乘积子数组
- 【算法】树形数组
- window10 GPU版tensorflow安装(一)
- spring boot+redis+shrio+会话
- 概率论和数理统计
- 如何在4.X版本实现Switch在5.X的效果
- Andrdoid自定义View之canvas.clipPath(path);
- storm1.x支持主节点nimbus高可用 多master集群部署
- 安卓实训笔记第三天
- 图片的二次采样
- 数学的坑,一点点来填
- RAM
- 想成为嵌入式程序员应知道的0x10个基本问题
- 统计难题(字典树或map容器)