美文网首页
如何实现EditText的TextSize和TextSizeHi

如何实现EditText的TextSize和TextSizeHi

作者: NiuLinguo | 来源:发表于2019-08-19 16:19 被阅读0次

    需求

    在做登录页面的时候,有个手机号码输入框,没有填写手机号时需要显示hint为“请输入手机号码”。

    ok这个需求没有问题,但是设计小哥设计出来的效果,手机号码显示的字体和hint的字体大小不一致?!!手机号码显示的字体时22sp,hint字体显示的是17sp。

    我尼玛,大家都知道 EditText只有一个属性“textSize”设置字体大小,现在两个字体不一致,我该如何是好。。。设计不懂开发者的悲伤,为了实现这个效果,我只能搞点歪门邪道的逻辑了。

    没有输入时的样式 输入后的样式

    开发

    一开始我准备监听EditText的输入变化,如果EditText输入为空,那么用代码动态的设置textSize为17sp,否则设置为22sp。

    这个逻辑简单,一会的功夫就完成了,插上手机运行一看,我去!光标也会随着字体大小变长变短,尼玛。。。忘了光标这回事了。这可不行,这个效果设计小哥绝对不会接受的。

    为了让光标不变,字体大小我写死成了22sp,现在还是想想怎么改变hint字体的大小吧。仔细研究了一下EditText的setHint方法,发现它是父类TextView的方法,参数是CharSequence,是CharSequence,CharSequence,嗯。。。有门儿了!试试SpannableString吧!

    百度了一下SpannableString怎么改变字体大小,找到了,可以设置AbsoluteSizeSpan,这下厉害了,虽然我设置的textSize是22sp,但是我用AbsoluteSizeSpan把hint的字体设置成了17sp。

    插上手机运行一看,没毛病!

    BUG

    提交测试后,测试小哥给我反馈这块UI有毛病,说光标会变大变小。不对呀,我开发的时候为了解决这个问题还耽误了很长时间呢。我不信,插上我的手机运行一看,没毛病。后来恍然大悟,这个是机型适配问题。

    测试小哥拿的是小米手机,我用的是华为手机,小米手机会有光标变大变小这个问题。

    分析

    我设置的字体大小是22sp,没有改动,为什么光标会变大变小呢?从代码上看,只有SpannableString会对这块有影响。我试着把AbsoluteSizeSpan设置成22sp,发现光标正常了。我再尝试着把hint的第一个字设置成22sp,后面的字设置成17sp,发现也没有问题,但是第一个字和后面的字大小不一致,好难看。

    只有在小米系统上有这个问题。我猜想小米系统画蛇添足,对这一块进行了优化,光标的长短小米考虑到了hint第一个字符的AbsoluteSizeSpan设置的大小,我欲哭无泪。

    我尝试着把hint的第一个字符设置成空格,大小为22sp,其他的字设置成17sp,运行一看“请输入手机号码”提示整体向后移动了,也不好看。我想要是有一个字符没有长度,不会在屏幕上展示出来就好了,这样hint看起来就不会往后移动,而且我还可以把第一个字符设置成22sp,光标也就不会变大变小了。

    对了,我记得有一个空字符的东西,百度一看‘\0’就代表空字符。我把字符串改成“\0请输入手机号码”,再用AbsoluteSizeSpan把“请输入手机号码”设置成了17sp,运行起来一看,完美!

    以前上大学的时候学过ASCII码里面第一个就是空字符,想着这玩意有啥用。今天还真的用上了!

    总结

    • TextView的setHint参数是CharSequence,也就意味着可以使用SpannableString来实现各种骚样式。
    • 华为、小米的光标长度处理逻辑不一样。
    • 空字符('\0')的妙用


    相关文章

      网友评论

          本文标题:如何实现EditText的TextSize和TextSizeHi

          本文链接:https://www.haomeiwen.com/subject/efpssctx.html