android用java写文本框_Android 使用TextView实现验证码输入框
一、需求问题
网上开源的是构建同等数量的EditText,这种存在很多缺陷,主要如下
1、数字/字符键盘切换后状态无法保存
2、焦点切换无法判断
3、光标位置无法修正
为了解决上述问题,使用TextView实现输入框,需要解决的问题是
1、允许TextView可编辑输入
2、修改onDraw实现
效果如下
二、使用TextView 实现输入框
public class EditTextView extends TextView implements TextWatcher {
private final int INPUT_BOX_NUM = 5;
private int mBoxSpace = 10;
public EditTextView(Context context) {
this(context,null);
}
public EditTextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public EditTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setFocusable(true);
setFocusableInTouchMode(true); //支持触摸聚焦
setClickable(true);
setGravity(Gravity.CENTER_VERTICAL);
setMaxLines(1);
setFilters(new InputFilter[]{
new InputFilter.LengthFilter(INPUT_BOX_NUM)
});
if(Build.VERSION.SDK_INT>=23) {
setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);
}
mBoxSpace = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,10,context.getResources().getDisplayMetrics());
addTextChangedListener(this);
}
@Override
protected boolean getDefaultEditable() {
return true;
}
@Override
protected void onDraw(Canvas canvas) {
// super.onDraw(canvas);
TextPaint paint = getPaint();
int strokeWidth = (int) paint.getStrokeWidth();
int boxWidth = (getWidth()- strokeWidth*2 - (INPUT_BOX_NUM-1)*mBoxSpace)/INPUT_BOX_NUM;
int boxHeight = getHeight() - strokeWidth*2;
RectF rectF = null;
Paint.Style style = paint.getStyle();
Paint.Align align = paint.getTextAlign();
paint.setTextAlign(Paint.Align.CENTER);
paint.setStyle(Paint.Style.STROKE);
paint.setTextAlign(Paint.Align.CENTER);
String text = getText().toString();
for (int i=0;i
rectF = new RectF(
i*(boxWidth+mBoxSpace),
0,
i*(boxWidth+mBoxSpace)+boxWidth,
boxHeight
);
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
float top = fontMetrics.top;//为基线到字体上边框的距离,即上图中的top
float bottom = fontMetrics.bottom;//为基线到字体下边框的距离,即上图中的bottom
int baseLineY = (int) (rectF.centerY() - top/2 - bottom/2);//基线中间点的y轴计算公式
canvas.drawRoundRect(rectF,0,0,paint);
if(text.length()>i) {
String CH = String.valueOf(text.charAt(i));
canvas.drawText(CH,rectF.centerX(),baseLineY,paint);
}
}
paint.setStyle(style);
paint.setTextAlign(align);
}
/**
* 控制是否返回完整文本
* @return
*/
@Override
public boolean getFreezesText() {
return true;
}
@Override
public Editable getText() {
return (Editable) super.getText();
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, BufferType.EDITABLE);
}
/**
* 控制光标展示
* @return
*/
@Override
protected MovementMethod getDefaultMovementMethod() {
return ArrowKeyMovementMethod.getInstance();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
}
android用java写文本框_Android 使用TextView实现验证码输入框相关推荐
- android用java写文本框_Android 自动完成文本框的实例
Android:自动完成文本框 xml文件代码如下: xmlns:android="http://schemas.android.com/apk/res/android" andr ...
- android+点击屏幕隐藏键盘,Android点击EditText文本框之外任何地方隐藏键盘的解决办法...
1,实现方法一: 通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 android:id="@+id/traceroute ...
- Android Studio基础输入文本框EditText
Android Studio基础输入文本框EditText 接续上一节<Android Studio 基础按钮使用> 1.提示文本框.输入文本框,在布局xml编写 <EditText ...
- JAVA写文本编辑器(四)
其实写到这里,我已经差不多断气了... 常规套路,这里是前三篇的传送门,需要的同学可以看一下:JAVA写文本编辑器(三) JAVA写文本编辑器(二)JAVA写文本编辑器(一) 现在我们只差最后一部分了 ...
- java软件屏幕大小转换,android 用java写一个自动适配各种屏幕大小的工具
android 用java写一个自动适配各种屏幕大小的工具,假设我当前机器屏幕宽高为1920*1116,我页面某个组件的宽度为100px,那么在1280*800的机器上,按道理将应该是100/1920 ...
- java swing做输入框,java Swing 文本框的使用
/** * Java Swing 文本框控件 * @author gao */ package com.gao; import java.awt.GridLayout; import javax.sw ...
- java中文本框显示在命令按钮后面_Maya中Pymel写个带界面的重命名工具(一)
创建窗口 pymel.core.windows.window() 此命令用来创建一个窗口,但不会显示窗口 显示窗口 pymel.core.windows.showWindow() 此命令用来显示指定窗 ...
- java 限制文本框长度_java中限制文本框输入长度的显示(转载)
我最近在网上看到一篇文章很不错,对于限制文本框输入长度的显示很方便 JAVA不像C#能够有maxLength这个属性对文本框的输入长度进行控制,但也是有办法实现相应的功能的. 写一个MyDocumen ...
- (Android Studio)添加文本框
此文大部分摘自http://hukai.me/android-training-course-in-chinese/basics/firstapp/building-ui.html android : ...
最新文章
- python使用input函数时、必须添加提示文字-python input函数
- 立体匹配之NCC算法
- 判断比较器Comparator和Comparable的升序降序问题
- k8s pvc扩容:pvc创建后扩容
- (简单) POJ 3984 迷宫问题,BFS。
- python入门系列:迭代器和生成器
- python的数组下标_python数组下标
- Axure 8 团队协作
- 线性表的定义和基本操作
- 一文了解复旦大学NLP实验室的14篇EMNLP 2022长文内容
- html 自动 生成 日期,自己生成Select列表日期时间
- Linux摄像头UVC驱动第五篇--启动传输之设置摄像头参数
- 【Excel VBA】神操作之命名单元格或区域(二)——引用命名单元格或区域
- 基于单片机的心率脉搏检测电路设计(#0200)
- [讨论]一个真正的IT人来谈中国与印度的软件
- 如何利用链接诱饵来为网站获取强大的流量?
- 畅享原汁+气泡的双倍快乐 摩飞气泡原汁机全面评测
- (转)Dundas Chart for .NET
- 【码蹄集】(百度松果菁英班)MT1062 圆锥体表面积
- Qt编写项目作品大全
热门文章
- leetcode 1184 python
- IDEA的使用,手把手带你快速入门IDEA
- 警示:强制关闭OGG进程触发bug致abended,详述处理过程
- 基于大数据搭建社交好友推荐系统
- 从物理空间到数字世界,数字孪生打造智能化基础设施
- 【华为云技术分享】从零搭建一个灰度发布环境
- 都是程序员,凭什么他工资比我高,下班比我早?
- 技术谈 | SDN 和 NFV 之间的爱与恨
- 老兵的十年职场之路(一)
- ubuntu php mysql apache_Ubuntu+Apache+PHP+Mysql环境搭建(完整版)(转)