600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android EditText的属性详解以及EditText输入密码的格式限制

Android EditText的属性详解以及EditText输入密码的格式限制

时间:2021-10-01 23:46:51

相关推荐

Android EditText的属性详解以及EditText输入密码的格式限制

简介

EditText(输入框),是安卓开发布局时比较常用的控件,和TextView非常类似,最大的区别是:EditText可以接受用户输入。

属性

应用场景

EditText输入的文字为密码形式

(1)设置文字为密码的格式,密码不可见。

android:password="true"

(2)点击小眼睛密码显示隐藏,需要在代码中设置

//显示密码mUserPwdEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());//隐藏密码mUserPwdEt.setTransformationMethod(PasswordTransformationMethod.getInstance());

设置hint字号大小

//strings.xml文件中添加,设置字号为14<string name="user_name_hint"><font size="14">请输入手机号</font></string>//引用android:hint="@string/user_name_hint"

登录模块,密码输入字符类型限制

之前找了一种禁止输入文字的代码校验(会出现bug):

//限制输入框不能输入汉字public static void StringWatcher(EditText editText){editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {if (s.length() > 0) {for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c >= 0x4e00 && c <= 0X9fff) {s.delete(i,i+1);}}}}});}

以上这种方式确实可以实现禁止文字的输入,但是这里有一个问题,执行mUserPwdEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); 密码设置为显示时,输入文字会报错误。报错如下:

-10-28 09:58:34.757 29046-29046/e.dispatch E/AndroidRuntime: FATAL EXCEPTION: mainProcess: e.dispatch, PID: 29046java.lang.IndexOutOfBoundsExceptionat android.graphics.Paint.getRunAdvance(Paint.java:2947)at android.text.TextLine.getRunAdvance(TextLine.java:827)at android.text.TextLine.handleText(TextLine.java:878)at android.text.TextLine.handleRun(TextLine.java:1118)at android.text.TextLine.measureRun(TextLine.java:510)at android.text.TextLine.measure(TextLine.java:378)at android.text.TextLine.metrics(TextLine.java:306)at android.text.Layout.getLineExtent(Layout.java:1441)at android.text.Layout.getLineMax(Layout.java:1389)at android.text.Layout.getLineRight(Layout.java:1379)at android.widget.TextView.bringPointIntoView(TextView.java:9865)at android.widget.TextView.updateAfterEdit(TextView.java:10635)at android.widget.Editor.finishBatchEdit(Editor.java:1732)at android.widget.Editor.endBatchEdit(Editor.java:1714)at android.widget.TextView.endBatchEdit(TextView.java:8839)at com.android.internal.widget.EditableInputConnection.endBatchEdit(EditableInputConnection.java:78)at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:851)at android.view.mitText(BaseInputConnection.java:197)at com.android.internal.mitText(EditableInputConnection.java:177)at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:339)at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:89)at android.os.Handler.dispatchMessage(Handler.java:107)at android.os.Looper.loop(Looper.java:224)at android.app.ActivityThread.main(ActivityThread.java:7562)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

网上去找报错解决办法,没找下,于是换了另外一种方式。

目的:实现输入框 "仅支持输入数字、字母、符号,. "

android:digits="" 这是EditText的一个属性,以前是没有见过这个属性的,估计很少人知道的。

//strings.xml中添加<string name="pwd_format">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.</string>//引用<EditTextandroid:id="@+id/user_pwd_et"android:layout_width="match_parent"android:layout_height="@dimen/dp_35"android:background="@null"android:hint="@string/password_hint"android:maxLength="16"android:maxLines="1"android:paddingLeft="@dimen/dp_10"android:paddingRight="@dimen/dp_38"android:password="true"android:digits="@string/pwd_format"android:singleLine="true"android:text=""android:textColor="@color/color_text"android:textSize="@dimen/sp_18" />

软键盘弹出后输入框被遮挡,想要实现输入框的整个父布局上移

/*** 软键盘遮挡输入框,重新计算布局,使输入框上顶* 在清单列表中 Activity设置上 android:windowSoftInputMode="adjustPan"** @param root 最外层布局,需要调整的布局,title是不移动的,一般是title下方的布局* @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部,一般是输入框或输入框的父布局*/public static void controlKeyboardLayout(final View root, final View scrollToView) {// 注册一个回调函数,当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {Rect rect = new Rect();// 获取root在窗体的可视区域root.getWindowVisibleDisplayFrame(rect);// 当前视图最外层的高度减去现在所看到的视图的最底部的y坐标int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;Log.i("tag", "最外层的高度" + root.getRootView().getHeight());// 若rootInvisibleHeight高度大于100,则说明当前视图上移了,说明软键盘弹出了if (rootInvisibleHeight > 100) {//软键盘弹出来的时候int[] location = new int[2];// 获取scrollToView在窗体的坐标scrollToView.getLocationInWindow(location);// 计算root滚动高度,使scrollToView在可见区域的底部int srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom;root.scrollTo(0, srollHeight);} else {// 软键盘没有弹出来的时候root.scrollTo(0, 0);}}});}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。