1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > EditText属性及一些常用用法

EditText属性及一些常用用法

时间:2019-08-24 05:41:33

相关推荐

EditText属性及一些常用用法

推荐阅读:

android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法

Android仿微信朋友圈评论功能

继承关系:

class EditText extends TextView

android:inputType

在开发的过程中,通常会用到EditText,如何让虚拟键盘来适应输入框中内容的类型,通常我们都会在xml文件中加入android:inputType=“”。

android:inputType="none"android:inputType="text"android:inputType="textCapCharacters"//前3个输入普通字符android:inputType="textCapWords"//单词首字母大小android:inputType="textCapSentences"//仅第一个字母大小android:inputType="textAutoCorrect"android:inputType="textAutoComplete"//前两个自动完成android:inputType="textMultiLine"//多行输入android:inputType="textImeMultiLine"//输入法多行(不一定支持)android:inputType="textNoSuggestions"//不提示android:inputType="textUri"//URI格式android:inputType="textEmailAddress"//电子邮件地址格式android:inputType="textEmailSubject"//邮件主题格式android:inputType="textShortMessage"//短消息格式android:inputType="textLongMessage"android:inputType="textPersonName"//人名格式android:inputType="textPostalAddress"//邮政格式android:inputType="textPassword"//密码格式android:inputType="textVisiblePassword"//密码可见格式android:inputType="textWebEditText"//作为网页表单的文本格式android:inputType="textFilter"//文本筛选格式android:inputType="textPhonetic"//拼音输入格式android:inputType="number"//数字格式android:inputType="numberSigned"//有符号数字格式android:inputType="numberDecimal"//可以带小数点的浮点格式android:inputType="phone"//拨号键盘android:inputType="datetime"android:inputType="date"//日期键盘android:inputType="time"//时间键盘

EditText是否自动弹出输入法键盘

在开发过程中,我们经常会遇到Activity中包含EditText控件时会自动弹出虚拟键盘的情况,这是由于EditText自动获得焦点的缘故,只要让EditText失去焦点就行了,解决办法如下:

1、在Manifest.xml文件中相应的Activity下添加如下代码:

android:windowSoftInputMode="stateHidden"

2、让EditText失去焦点,用EditText的clearFocus:

EditText edt = (EditText)findViewById(R.id.edt);edt.clearFocus();

3、强制隐藏Android输入法窗口:

EditText edt = (EditText)findViewById(R.id.edt); InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edt.getWindowToken(), 0);

4、要求EditText始终不弹出虚拟键盘:

EditText edt = (EditText)findViewById(R.id.edt); edt.setInputType(InputType.TYPE_NULL);

但有时我们确实是想让EditText自动获得焦点并弹出软键盘,在设置了EditText自动获得焦点后,软件盘不会弹出。

注意:此时是由于刚跳到一个新的界面,界面未加载完全而无法弹出软键盘。此时应该适当的延迟弹出软键盘,如500毫秒(保证界面的数据加载完成,如果500毫秒仍未弹出,则延长至1000毫秒)。

1、可以在EditText后面加上一段代码:

Timer timer = new Timer(); timer.schedule(new TimerTask() {public void run() {InputMethodManager inputManager = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(editText, 0); } }, 500);

2、给activity配置加入属性:

android:windowSoftInputMode="adjustResize"

在EditText中软键盘的调起、关闭

(1)EditText有焦点(focusable为true)阻止输入法弹出

editText=(EditText)findViewById(R.id.txtBody);editText.setOnTouchListener(new OnTouchListener(){public boolean onTouch(View v, MotionEvent event){editText.setInputType(InputType.TYPE_NULL); //关闭软键盘return false;}});

(2)当EidtText无焦点(focusable=false)时阻止输入法弹出

InputMethodManager imm =(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

(3)调用数字键盘并设置输入类型和键盘为英文

etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

//设置输入类型和键盘为英文android:inputType="textUri|textMultiLine"

(4)

android:focusable="false"//键盘永远不会弹出

<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘

//关闭键盘(比如输入结束后执行)InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);

//自动弹出键盘((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘

有时候也要对intent的默认焦点进行设置,不至于在intent跳转的时候默认焦点(光标)在EditText上,导致进入intent就打开输入法,影响界面美观。

默认焦点的顺序是:从上到下、从左到右第一个可以输入的控件作为焦点。

可以让别的控件获取焦点:

button.setFocusable(true);button.requestFocus();button.setFocusableInTouchMode(true);

也可以:

在EditText前面放置一个看不到的或Editview的父布局LinearLayout,让他率先获取焦点:

<LinearLayoutandroid:focusable="true"android:focusableInTouchMode="true"android:layout_width="0px"android:layout_height="0px"/>

EditText密码显示隐藏

XML文件中:

Android:password="true" // 以”.”形式显示密码文本android:inputType=”textPassword” //不可见密码android:inputType=”textVisiblePassword”//可见密码

Java代码中

et.setTransformationMethod(HideReturnsTransformationMethod.getInstance());et.setTransformationMethod(PasswordTransformationMethod.getInstance());

例子如下:

//密码是否隐藏imgviewForgetPwEye.setOnClickListener(new View.OnClickListener() @Overridepublic void onClick(View v) {if (isshow) {//设置密码为隐藏的editForgetPwUserPasswd.setTransformationMethod(PasswordTransformationMethod.getInstance());isshow = false;} else {//设置EditText的密码为可见的 editForgetPwUserPasswd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());isshow = true;}}});

EditText的属性很多,这里介绍一些:

android:hint="请输入数字!"//设置显示在空间上的提示信息 android:numeric="integer"//设置只能输入整数,如果是小数则是:decimal android:singleLine="true"//设置单行输入,一旦设置为true,则文字不会自动换行。 android:password="true"//设置只能输入密码 android:textColor = "#ff8c00"//字体颜色 android:textStyle="bold"//字体,bold, italic, bolditalic android:textSize="20dip"//大小 android:capitalize="characters"//以大写字母写,设置英文字母大写类型。设置如下值:sentences仅第一个字母大写;words每一个单词首字母大小,用空格区分单词;characters每一个英文字母都大写。android:textAlign="center"//EditText没有这个属性,但TextView有,居中 android:textColorHighlight="#cccccc"//被选中文字的底色,默认为蓝色 android:textColorHint="#ffff00"//设置提示信息文字的颜色,默认为灰色android:textScaleX="1.5"//控制字与字之间的间距android:typeface="monospace"//字型,normal, sans, serif, monospace android:background="@null"//背景,这里没有,指透明 android:layout_weight="1"//权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。 android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。 android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom android:gray="top"//多行中指针在第一行第一位置et.setSelection(et.length());//调整光标到最后一行 android:autoText //自动拼写帮助 android:digits //设置只接受某些数字 android:phoneNumber //输入电话号码 android:editable //是否可编辑 android:autoLink=”all” //设置文本超链接样式当点击网址时,跳向该网址 android:cursorVisible="false" //隐藏光标android:background="#00000000"//不要文本框背景android:textAppearance="?android:attr/textAppearanceLargeInverse"//文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。不知道这样理解对不对? 属性名称描述 android:autoLink//设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText//如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。 android:bufferType//指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2。 android:capitalize//设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。 android:cursorVisible//设定光标为显示/隐藏,默认显示。 android:digits//设置允许输入哪些字符。如“1234567890.+-*/% ()” android:drawableBottom//在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。 android:drawableLeft//在text的左边输出一个drawable,如图片。 android:drawablePadding//设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。 android:drawableRight//在text的右边输出一个drawable,如图片。 android:drawableTop//在text的正上方输出一个drawable,如图片。 android:editable//设置是否可编辑。这里无效果,参见EditView。 android:editorExtras//设置文本的额外的输入数据。在EditView再讨论。 android:ellipsize//设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动) android:freezesText//设置保存文本的内容以及光标的位置。参见:这里。 android:gravity//设置文本位置,如设置成“center”,文本将居中显示。 android:hintText//为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在EditView中使用,但是这里也可以用。 android:imeOptions//附加功能,设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。 android:imeActionId//设置IME动作ID。在EditView再做说明,可以先看这篇帖子:这里。 android:imeActionLabel//设置IME动作标签。在EditView再做说明。 android:includeFontPadding//设置文本是否包含顶部和底部额外空白,默认为true。 android:inputMethod//为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。 android:inputType//设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。 android:linksClickable//设置链接是否点击连接,即使设置了autoLink。 android:marqueeRepeatLimit//在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。 android:ems//设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度,如图: android:maxEms//设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。 android:minEms//设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。 android:maxLength//限制显示的文本长度,超出部分不显示。 android:lines//设置文本的行数,设置两行就显示两行,即使第二行没有数据。 android:maxLines//设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。 android:minLines//设置文本的最小行数,与lines类似。 android:lineSpacing//Extra设置行间距。 android:lineSpacingMultiplier//设置行间距的倍数。如”1.2” android:numeric//如果被设置,该TextView有一个数字输入法。此处无用,设置后唯一效果是TextView有点击效果,此属性在EdtiView将详细说明。 android:password//以小点”.”显示文本 android:phoneNumber//设置为电话号码的输入方式。 android:privateImeOptions//设置输入法选项,此处无用,在EditText将进一步讨论。 android:scrollHorizontally//设置文本超出TextView的宽度的情况下,是否出现横拉条。 android:selectAllOnFocus//如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。 android:shadowColor//指定文本阴影的颜色,需要与shadowRadius一起使用。效果: android:shadowDx//设置阴影横向坐标开始位置。 android:shadowDy//设置阴影纵向坐标开始位置。 android:shadowRadius//设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。 android:singleLine//设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。如果不设置singleLine或者设置为false,文本将自动换行 android:textStyle//设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开 android:typeface//设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] android:maxHeight//设置文本区域的最大高度 android:minHeight//设置文本区域的最小高度 android:maxWidth//设置文本区域的最大宽度 android:minWidth//设置文本区域的最小宽度 android:textAppearance//设置文字外观。如“?android:attr/textAppearanceLargeInverse ”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse android:textAppearance设置文字外观。如“?android:attr/textAppearanceLargeInverse ”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse

监听EditText的变化

使用EditText的addTextChangedListener(TextWatcher watcher)方法对EditText实现监听,TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法:

例子一:

text.addTextChangedListener(textWatcher); private TextWatcher textWatcher = new TextWatcher() {@Override public void afterTextChanged(Editable s) {// TODO Auto-generated method stubLog.d("TAG","afterTextChanged--------------->"); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {// TODO Auto-generated method stub Log.d("TAG","beforeTextChanged--------------->"); } @Override public void onTextChanged(CharSequence s, int start, int before,int count) {Log.d("TAG","onTextChanged--------------->"); str = text.getText().toString(); try {//if ((heighText.getText().toString())!=null) Integer.parseInt(str); } catch (Exception e) {// TODO: handle exception showDialog(); } }}; private void showDialog(){AlertDialog dialog; AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("消息").setIcon(android.R.drawable.stat_notify_error); builder.setMessage("你输出的整型数字有误,请改正"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener(){@Override public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub } }); dialog = builder.create(); dialog.show(); }

例子二:

et.addTextChangedListener(new TextWatcher() {@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {tv.setText("还能输入"+Rest_Length+"个字"); } @Override public void afterTextChanged(Editable s) {tv.setText("还能输入"+Rest_Length+"个字"); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) {if(Rest_Length>0){Rest_Length = MAX_LENGTH - et.getText().length(); } } }); clearBtn.setOnClickListener(new Button.OnClickListener() {@Override public void onClick(View v) {et.setText(""); Rest_Length = MAX_LENGTH; } }); }

关于焦点:

et.setFocusable(true);et.setFocusableInTouchMode(true);et.requestFocus();et.clearFocus();//失去焦点et.requestFocus();//获取焦点

EditText弹出软键盘遮住输入框问题

如果在Activity中的布局的下方有EditText,获取焦点弹出软键盘的时候,如果不做处理,软键盘可能会遮挡输入框,用户提现不好,网上也有很多人提出结局方案,这里就分析一下解决的效果.

需要用到EditText的布局大概分为两种,一种是页面显示的内容不希望有残缺,比如软键盘把标题挤出了屏幕,如登录注册搜索等,EditText多半在页面上半部分.另一种是页面的上半部分不重要,比如聊天窗口,软键盘弹出的时候,上半部分的聊天记录可以被基础屏幕外,EditText多半在最下方.其他的情况可以根据本文做出选择,结果在最下面.

开始:

网上针对这个问题解决的方法大概这么几种:

1.修改AndroidManifest.xml文件

2.在Activity中添加配置

3.在布局文件中添加ScrollView

1.修改AndroidManifest.xml文件

在AndroidManifest.xml中对应的Activity配置:android:windowSoftInputMode=“stateVisible|adjustResize”

<activityandroid:name=".LoginActivity"//显示软键盘,并让布局压缩android:windowSoftInputMode="stateVisible|adjustResize"android:screenOrientation="portrait"></activity>

含义:该页面在弹出软键盘的同时屏幕内容被压缩,以腾出软键盘的空间.

解释它们的含义:

stateUnspecified//:界面没有设置"android:windowSoftInputMode"时的状态.这个状态是弹出有EditText的界面时时不弹出软键盘的,当EditText获取焦点的时候弹出软件盘stateUnchanged//:状态不改变,意思就是和上一个界面相同,上一个界面弹出软键盘,跳转到这个界面时,软键盘也是弹出状态.stateHidden//:隐藏键盘,弹出这个界面的时候,不管上个界面是什么状态,这个界面的软键盘都是隐藏的.stateAlwaysHidden//:一直隐藏(跟上面的区别未知,试不出来).stateVisible//:强制弹出软键盘.跳转到界面后,没有EditText也弹出键盘.stateAlwaysVisible//:一直显示键盘(同上).

这里开始就是跟内容相关的了,也跟本文也相关

adjustUnspecified

//:算是默认方式.如果界面没有被ScrowView包裹,键盘会挡住一部分内容,如果界面被ScrowView包裹了,会让ScrowView中的内容滚动,以放下软键盘.

adjustResize

//:主界面会缩放,用来放置软键盘.

adjustPan:主界面不会缩放,会向上移来放置软键盘

上面两个不同的地方在于,如果内容是listview,当显示最下面一个item后弹出软键盘,adjustResize会让listview下沿被软键盘挡住,adjustPan则还是显示最下面一个item.

2.在Activity中添加配置

在该Activity中的onCretae()的setContentView()方法前面添加:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

含义:把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间.

解释他们的含义:

SOFT_INPUT_ADJUST_NOTHING//: 不调整(输入法完全直接覆盖住,未开放此参数);SOFT_INPUT_ADJUST_PAN//:把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间SOFT_INPUT_ADJUST_RESIZE//: 整个Layout重新编排,重新分配多余空间;SOFT_INPUT_ADJUST_UNSPECIFIED//: 系统自己根据内容自行选择上两种方式的一种执行(默认配置).这里SOFT_INPUT_ADJUST_RESIZE和SOFT_INPUT_ADJUST_PAN和上面中的adjustResize和adjustPan效果是一样的.

@Overrideprotectedvoid onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//让布局向上移来显示软键盘getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);setContentView(R.layout.activity_login);init();}

3.在布局文件中添加ScrollView

ScrollView是能让弹出的软键盘添加到布局的下面,从而不挡住部分布局.这里往往需要跟上面的adjustResize和adjustPan两个状态一起用.

布局:

<ScrollViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="8"android:fillViewport="true"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><EditTextandroid:layout_width="match_parent"android:layout_height="50dp" /></LinearLayout></ScrollView>

向上移的方式 设置:

<activityandroid:name=".SecondActivity"android:windowSoftInputMode="adjustPan"></activity>

压缩的方式 设置:

<activityandroid:name=".SecondActivity"android:windowSoftInputMode="adjustResize"></activity>

结果:

只要弹出软键盘会影响到布局的情况,都用ScrollView把布局包裹起来,被包裹的内容就是可能被缩放或挤出屏幕外的内容.然后根据EditText的位置判断用adjustResize还是用adjustPan.

adjustResize是收缩,adjustPan是向上挤

个人推荐,登录注册用adjustResize,聊天窗口用adjustPan

参考:

Activity启动后EditText是否自动弹出输入法虚拟键盘的问题

Android文本输入框EditText方法说明和属性

Android EditView属性详细介绍

【Android进阶学习】监听EditText的变化

EditText弹出软键盘遮住输入框问题

限制只能输入指定的字符

参考:

/question/303588034660071684.html?qq-pf-to=pcqq.group

andorid editext android:digits="abcdefghijklmnopqrstuvwxyz"

用代码写来控制规则

设置 android:digits 属性即可

例如:

android:digits = "abcdef"

有两种方法可以实现:

方法一:

EditText mEditText = (EditText)findViewById(R.id.MyEditText);String digits = "abcdef";mEditText.setKeyListener(DigitsKeyListener.getInstance(digits));

方法二:

EditText mEditText = (EditText)findViewById(R.id.MyEditText);InputFilter[] filters = new InputFilter[1];filters[0] = new MyInputFilter("abcdef");mEditText.setFilters(filters);public class MyInputFilter extends LoginFilter.UsernameFilterGeneric {private String mAllowedDigits;public PopInputFilter( String digits ) {mAllowedDigits = digits;}@Overridepublic boolean isAllowed(char c) {if (mAllowedDigits.indexOf(c) != -1) {return true;} return false;}}

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