专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
复利大王  ·  国产美女的热舞 ·  2 天前  
复利大王  ·  J小姐,死于话多 ·  2 天前  
复利大王  ·  花旗中国区总裁被裁了 ·  2 天前  
51好读  ›  专栏  ›  郭霖

自定义具有Material Design效果的控件

郭霖  · 公众号  · android  · 2016-11-11 08:00

正文

请到「今天看啥」查看全文


按照常规先展示效果图并说明:

主要有以下几个效果:

  • edittext中的内容为0时,标签不出现。

  • edittext中的内容不为0时,标签开始出现。

  • edittext获取焦点时,下划线的颜色/粗细会发生改变。

  • edittext失去焦点时,下划线同样发生改变,标签颜色也更改。

  • 当限制输入字符个数时,右下角计数文字会进行计数。

  • 超过个数后,下划线和计数文字颜色会发生变化。

下面我们来动手开始实现。

继承EditText

为保留EditText的一些独特属性,我们选择继承EditText来实现自定义MaterialEditText。但在原生的EditText动手脚绘制一些文字/线,我们需要进行一些预处理:

1. 原生EditText本身含有下划线,我们需要将原生下划线去掉,这里可以通过设置EditView背景为null来实现:


2. 要绘制文字/下划线,我们需要获得坐标。而EditText的内部是可以滑动的,随着文字的增加,高度也会自动的增长。这里我们获取坐标时,使用 getScrollX() 和 getScrollY() 这两个函数获取输入状态下,我们需要的不断变化的横坐标和纵坐标:


3. 在系统开始绘制MaterialEditText之前,我们需要重新设置原生EditText的padding值,为什么需要重新设置padding值呢?因为我们在原生EditText上绘制文字和下划线等,占用了输入框的高度。重新设置padding值后,我们可以在padding的地方绘制我们的文字和下划线。一般我们设置顶部和底部的padding值就好了:


自定义属性






请到「今天看啥」查看全文