EditText(第2章)-对hint进行整容
来源:互联网 发布:算法复杂度 编辑:程序博客网 时间:2024/04/29 11:12
简书地址:http://www.jianshu.com/p/023b2e482d64
序
上图是个简单的EditText,默认的hint颜色和大小都是系统默认的,下面我准备对EditText的hint进行一个整容小手术。
1.如何改变hint的颜色
手术开始了,第一刀准备整下他的颜色:
技术支持:
android:textColorHint="#FF0000"//改变Hint的文字颜色android:textColor="#0000FF"//改变输入的文字颜色
术后效果:
手术结果:
成功!很好的改变的文字的颜色,而且没有排除反应(text和hint的冲突)
2.如何改变hint的文字大小
基于上次手术的成功,信心大增,开始下一刀改变文字的大小:
技术支持:
android:textSize="24sp"//设置文字大小
术后效果:
手术结果:
失败!将text的文字大小也同时改变了(就像一个妹子想来隆个鼻子,然后你顺带把她脸给隆了,结果自行脑补)
3.解决hint和text的文字大小冲突
上面的手术失败了,于是我去韩国进修了一段时间,带来了最新技术:
技术支持:
editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //在文字改变之前 editText.setTextSize(16); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //在文字改变的时候 if (TextUtils.isEmpty(s)) { editText.setTextSize(16);//这里的单位是sp }else{ editText.setTextSize(30); } } @Override public void afterTextChanged(Editable s) { //在文字改变的之后 }});
术后效果:
手术结果:
成功!简单粗暴解决了text和hint的冲突
原理分析:
利用对输入文字的监听TextWatcher,根据是否输入文字来判断目前显示的是hint还是text,从而动态设置文字的小大。
注意:在文字改变前也需要设置TextSize并且需要和onTextChanged中“没有文字时候”的大小统一
4.解决hint和text的文字大小冲突方法2
上面已经可以成功解决了问题,可是好不容易去一次“韩国”,我还偷学了另一种技术:
技术支持:
// 新建一个可以添加文本的对象SpannableString ss = new SpannableString("随便输");// 设置文本字体大小AbsoluteSizeSpan ass = new AbsoluteSizeSpan(8, true);// 将字体大小附加到文本的属性ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置hint属性 editText.setHint(new SpannedString(ss));
手术结果:
当然是成功的!这里就不贴图了
特别说明:需要注意的是上面代码中8的单位dp,如果设置为false,那么单位就是px。
这里提供一个工具类(摘自Android群英传,徐医生的书,强力推荐!)帮你转换成sp:
public class DisplayUtil { /** * px转换为dp,保证文字大小不变 * * @param context * @param pxValue * @return */ public static int pxTodp(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * dp转换为px,保证文字大小不变 * * @param context * @param dpValue * @return */ public static int dpTopx(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * px转换为sp,保证文字大小不变 * * @param context * @param pxValue * @return */ public static int pxTosp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * sp转换为px,保证文字大小不变 * * @param context * @param spValue * @return */ public static int spTopx(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * dp转换px,保证文字大小不变,系统的util * * @param context * @param dp * @return */ public static int dpTopx(Context context, int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); } /** * sp转换px,保证文字大小不变,系统的util * * @param context * @param dp * @return */ public static int spTopx(Context context, int sp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics()); }}
使用方法:
AbsoluteSizeSpan ass = new AbsoluteSizeSpan(DisplayUtil.spTopx(getApplicationContext(),16), false);
0 0
- EditText(第2章)-对hint进行整容
- 对EditText状态进行监听
- 整容
- EditText中hint消失
- EditText的hint
- 自定义EditText hint 样式
- AR测评:AR对整容行业尝试
- android:hint属性对TextView(或者EditText)的影响--源码分析
- 如何让Android下的hint多行时EditText焦点光标默认在第一行
- 对EditText进行监听,字数不超过12
- Android 对EditText进行拦截操作
- EditText的hint居中,设置EditText的hint位置
- EditText只改变Hint字体大小
- EditText 点击即清除 hint
- EditText只改变Hint字体大小
- EditText 中的hint(提示消息的字体大小设置) 单独设置 与textsize没有关系
- 在EditText中设置hint的大小和颜色,光标粗细和颜色...(二)
- 在EditText中设置hint的大小和颜色,光标粗细和颜色...(二)
- iOS 第三方框架下载网址
- CABasicAnimation用法
- xshell连接虚拟机中的linux
- Gridview Row事件响应方法无法获取其它UpdatePanel中控件数据的解决办法
- 通信协议——Http、TCP、UDP
- EditText(第2章)-对hint进行整容
- tomcat access log格式配置
- Android设计模式--Builder模式
- JavaScript arguments对象
- IOCTL命令-_IO, _IOR, _IOW, _IOWR 幻数的理解
- (第2讲)无序数组与有序数组的增删查
- 动态规划算法解最长公共子序列LCS问题
- Android系统截屏功能提取
- CentOs下安装Crab