设置EditText的背景

通过设置以下属性来设置EditText的背景

 android:background="@drawable/decoration"

decoration.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="12dp"/><stroke android:width="1dp" android:color="#E1E1E1"/></shape>

如果不需要背景,想去掉EditText自带的下划线,可以用以下设置

android:background="@null"

设置EditText的光标

  • 显示光标
    Java代码方式控制显示
   mEditText.requestFocus();//获取焦点 光标出现

EditText隐藏的方法:

editText.setCursorVisible(false);

EditText光标 显示的方法:

editText.setCursorVisible(true);

使用XML文件控制光标显示

cursorVisible 中
true为显示
false为隐藏光标
android:cursorVisible="true"
android:cursorVisible="false"
  • 控制EditText获取焦点

当点击EditText才会获取焦点,才会显示光标

Java代码方式设置

EditText mEditText = (EditText) findViewById(R.id.et);
mEditText.setFocusable(true);
mEditText.setFocusableInTouchMode(true);

XML方式设置

android:focusable="true"
android:focusableInTouchMode="true"

主动显示光标

mEditText.requestFocus();//获取焦点 光标出现

监听EditText焦点变化 当获取焦点后 hasFocus 为true

mEditText.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus) {// 获得焦点} else {// 失去焦点}}});

设置EditText不换行,只显示单行

EditText的xml布局文件里面有很多有关于行数的属性,
除了已经过时的singleLines 属性,现在还有maxLinesLines属性可以设置。

然而你会发现,即使同时设置了maxLines=”1”和lines=”1”,EditText依然是可以换行的。

其实很简单,只需要加上一条属性:

android:inputType="text"

这时你设置的maxLines和lines就起作用了。

Activity启动后EditText自动弹出键盘

  • 自动弹窗键盘

方式一

 给activity配置加入属性android:windowSoftInputMode=”adjustResize”

方式二

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {@Overridepublic void run() {InputMethodManager inputManager = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  inputManager.showSoftInput(editText, 0);  }
},500);

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

  • 隐藏键盘
    在开发过程中,经常会碰到Activity中包含EditText控件时会自动弹出虚拟键盘的情形,其实这是由于EditText自动获得焦点的缘故,只要让EditText失去焦点就行了

方式一
在Manifest.xml文件中相应的Activity下添加如下代码即可

android:windowSoftInputMode=”stateHidden”

方式二
让EditText失去焦点,用EditText的clearFocus即可:

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

方式三
强制隐藏Android输入法窗口

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

方式四
EditText始终不弹出虚拟键盘

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

监听EditText的内容变化

 EditText et = (EditText) findViewById(R.id.et);TextWatcher watcher = 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) {}};et.addTextChangedListener(watcher);
beforeTextChanged(CharSequence s, int start, int count, int after)s: 修改之前的内容
start: 字符串中即将发生修改的位置,如果是新增则为内容改变前光标的位置,如果是删除则为删除前被删除的字符的位置。
count: 字符串中即将被修改的文字的长度。如果是新增的话则为0,删除则为1
after: 被修改的文字修改之后的长度。如果是删除的话则为0,新增为1onTextChanged(CharSequence s, int start, int before, int count)s: 改变后的字符串
start: 有变动的字符串的下标,如果是新增则为新增内容的下标,如果是删除则为被删除内容的下标。
before: 被改变的字符串长度,如果是新增则为0,如果是删除则为1
count: 添加的字符串长度,如果是删除则为0,新增为1afterTextChanged(Editable s)
s: 修改后的内容

EditText响应软键盘事件

  • android 软件盘事件响应

在android中,有时需要对EditText实现软件盘监听的场景。当android按下软键盘的时候,响应完成、发送、搜索或者其他事件。
Google 提供了 EditorInfo、 KeyEvent 的一些方法,能够实现我们需要的功能。详细可研究:EditorInfo.class 和 KeyEvent.class.

输入回车键隐藏输入键盘的方法
如果布局中包含多个EditText,可以为每个EditText控件设置android:singleLine=”true”,弹出的软盘输入法中回车键为next,直到最后一个获取焦点后显示为Done,点击Done后,隐藏软键输入盘。将EditText的imeOptions属性设置android:imeOptions=”actionDone”,则不管是不是最后一个EditText,点击回车键即隐藏输入法。

监听Enter的事件,编写Enter的事件响应。设置文本框的OnKeyListener,当keyCode ==KeyEvent.KEYCODE_ENTER的时候,表明Enter键被按下,就可以编写自己事件响应功能了。

XML文件如下:

<EditTextandroid:id= "@+id/editTextId"android:layout_width= "fill_parent"android:layout_height= "50dp"android:imeOptions= "actionDone"android:hint= "@string/task_new_one"android:textSize= "15sp"android:singleLine= "true"android:paddingLeft= "5dp"android:layout_gravity= "center"android:background= "@drawable/rectangle"android:inputType= "text"></EditText>

把EditText的ImeOptions属性设置成不同的值,Enter键上可以显示不同的文字或图案。

actionNone : 回车键,按下后光标到下一行
actionGo : Go,
actionSearch : 一个放大镜
actionSend : Send
actionNext : Next
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框

通过修改 android:imeOptions 来改变默认的键盘显示文本。常用的常量值如下:

  • actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:

  • actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果:

  • actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果:

  • actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果:

  • actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果:

  • actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果:

  • actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果:


JAVA代码:

EditText inputText = (EditText) findViewById(R.id. editTextId);
inputText.setImeOptions(EditorInfo.IME_ACTION_DONE);

添加监听事件:

inputText.setOnEditorActionListener(new EditText.OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {// 业务代码}return false;// 返回false表示点击后,隐藏软键盘。返回true表示保留软键盘。}});

需要注意的是setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的回车键才会触发。

但是,如果手机的输入法不是内置输入法,而是其他第三方输入法,那么可能会发生软件盘回车键无响应的问题。为了防止该类事情,则增加以下方法,响应的其KeyEvent。

inputText.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (KeyEvent.KEYCODE_ENTER == keyCode && event.getAction() == KeyEvent.ACTION_DOWN) {// 业务代码return true;}return false;}
});

false: 抛给系统处理 (将事件放行,焦点会移动)
true: 用户自己处理 (将事件拦截,焦点不会移动)

android 输入类型:

根据要输入的内容展现相应的软件盘,可通过修改android:inputType 来实现,以下是一些常用的输入类型。

android:inputType="none"--输入普通字符
android:inputType="text"--输入普通字符
android:inputType="textCapCharacters"--输入普通字符
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"--时间键盘
密码框属性 android:password="true"   让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。纯数字 android:numeric="true"      让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入仅允许 android:capitalize="haoTest"   仅允许接受输入haoTest,一般用于密码验证android:editable="false"         设置EditText不可编辑android:singleLine="true"        强制输入的内容在单行android:ellipsize="end"         自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

Android 实现EditText输入金额

  1. 设置EditText的InputType

需要将EditText的InputType设置成如下格式,保证用户只能输入小数点和数字:

android:inputType="numberDecimal"

或者

setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
  1. 自定义InputFilter,代码如下:

CashInputFilter.java

 import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class CashInputFilter implements InputFilter {Pattern mPattern;//输入的最大金额private static final int MAX_VALUE = Integer.MAX_VALUE;//小数点后的位数private static final int POINTER_LENGTH = 2;private static final String POINTER = ".";private static final String ZERO = "0";public CashInputFilter() {// []匹配括号中的任意一个字符// - 在[]内表示字符范围 [0-9]可以匹配一位十进制数,也就是0到9之间的任意一个整数// * 紧跟在它前面的单元应匹配0次或者多次// ()标记一个子表达式的开始和结束位置,组成一个单元,可以对整个单元使用数量限定符// | 链接两个子表达式,表示或的关系// \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。mPattern = Pattern.compile("([0-9]|\\.)*");}/**** 使用source的下标范围[start--end)的内容,替换dest的下标范围是[dstart-dend)的内容。两个区间都是左闭右开 .end-start是本次输入的字数,dend-dstart是本次被替换的字数。** 被替换内容是指:当选择输入框里的内容,然后输入新的字符,选择的内容将会被新输入的字符替换。这些选择的内容就是被替换的内容。** @param source    新输入的字符串,如果是新增则为新增字符串,如果是删除则为空字符串""** @param start     新输入的字符串起始下标(新输入字符串的第一个字符在新字符串中的下标,都是0) 或者 本次输入被选择的起始位置,*                  如输入1,起始下标就是0,输入12,起始下标也是0,删除字符相当于输入空字符串"",空字符串的起始下标也是0** @param end       新输入的字符串终点下标(新内容的光标终止位置,不包含)或者 本次输入被选择的结束位置(不包含)*                  如输入1,终点下标就是1,输入13,终点下标就是2,输入66666,终点下标就是5,删除字符相当于输入空字符串"",空字符串的终点下标是0** @param dest      输入之前文本框内容,如果是通过键盘输入,则为输入之前文本框内的内容,如果是通过EditText.setText设置,则dest为空字符串""** @param dstart    //被替换内容在输入框中的起始位置,如果是新增,则为新增内容之前光标在输入框中的下标,如果是删除,则为被删除内容在输入框中的起始下标*                    如果输入前文本框内是"",输入1,则dstart为0,如果输入前文本框内是"1",输入2,则dstart为1,如果输入前文本框内是"12",删除2,则dstart为1*                    如果是通过EditText.setText设置,则 dstart为0*                  * @param dend      //被替换内容在输入框中的结束位置(不包含),如果是新增,则为新增内容之前光标在输入框中的下标,如果是删除,则为内容被删除前光标在输入框中的下标*                *                   如果是通过EditText.setText设置,则 dend为0*                   * @return          输入内容** 返回值是你最终想要添加的文本。** 如果返回空字符"",则不添加新内容。** 如果返回空(null),将本次输入完全添加到输入框中,相当于return source(不建议使用return source)** 返回指定有内容的字符串:你希望的输入(如"12345")。次将指定的字符串添加到输入框中(如"12345")**  当你在删除已有文本时,source的长度为0。不要以为是错误而过滤这种清空。**  不要直接修改dest的内容,它的内容只是用来查看的。** */@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {Log.d("ruanyandong", "filter: source "+source+" start "+start+" end "+end+" dest "+dest+" dstart "+dstart+" dend "+dend);String sourceText = source.toString();String destText = dest.toString();//验证删除等按键if (TextUtils.isEmpty(sourceText)) {return "";}Matcher matcher = mPattern.matcher(source);//已经输入小数点的情况下,只能输入数字if(destText.contains(POINTER)) {if (!matcher.matches()) {return "";} else {if (POINTER.equals(source.toString())) {  //只能输入一个小数点return "";}}//验证小数点精度,保证小数点后只能输入两位int index = destText.indexOf(POINTER);int length = dend - index;if (length > POINTER_LENGTH) {return dest.subSequence(dstart, dend);}} else {/*** 没有输入小数点的情况下,只能输入小数点和数字* 1. 首位不能输入小数点* 2. 如果首位输入0,则接下来只能输入小数点了*/if (!matcher.matches()) {return "";} else {if ((POINTER.equals(source.toString())) && TextUtils.isEmpty(destText)) {  //首位不能输入小数点return "";} else if (!POINTER.equals(source.toString()) && ZERO.equals(destText)) { //如果首位输入0,接下来只能输入小数点return "";}}}//验证输入金额的大小double sumText = Double.parseDouble(destText + sourceText);if (sumText > MAX_VALUE) {return dest.subSequence(dstart, dend);}return dest.subSequence(dstart, dend) + sourceText;}}
  1. CashInputFilter.java 使用方法

在onCreate中写入代码,moneyEditText为输入框

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);moneyEditText = (EditText) findViewById(R.id.EditText);InputFilter[] filters = {new CashInputFilter()};moneyEditText.setFilters(filters);}

android软键盘的事件响应:android EditText inputType 及 android:imeOptions=”actionDone”
EditText自定义InputFilter完全解析----推荐的监听输入内容的方法
Android 实现EditText输入金额
Android EditText的setOnEditorActionListener方法

Android EditText使用总结相关推荐

  1. android edittext限制字节_android EditText输入限制

    zyz 发表于 2012-5-30 18:19:03 android EditText输入限制 android:digits="1234567890.+-*/%\n()" 限制输入 ...

  2. android edittext html 图片,Android EditText加载HTML内容(内容包含网络图片) -电脑资料...

    android中的Html.fromHtml可以用来加载HTML的内容,fromHtml有三个参数需要设置,第一个是要显示的html内容,第二个就是要说的重点,ImageGetter,用来处理图片加载 ...

  3. Android EditText不弹出输入法焦点问题的总结

    同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出.不好意思,这问题我也一头雾水,谁知道可以告诉我,否则我就把这个问题留下来,以后研究android 源码时再搞个清楚 ...

  4. Android EditText密码框的可见性设置

    Android EditText密码框的可见性设置 最近写安卓时要实现密码可见性转换,经过查找资料后发现了两种方法可以实现. 方法一 通过setInputType()方法实现 passwordEdit ...

  5. android edittext 不可编辑

    今天,简单讲讲如何让  edittext 不可编辑. 这个很简单,不过之前忘记了,还是查找了部分资料,所以这里记录一下. 1.android:editable="false" ...

  6. java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例

    本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android   EditText输入框,并没有 ...

  7. android设置输入框输入字符限制,Android EditText限制输入字符的方法总结

    Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣. 第一种方式 ...

  8. android EditText获取光标位置并安插字符删除字符

    android EditText获取光标位置并插入字符删除字符 1.获取光标位置 int index = editText.getSelectionStart(); 2.在光标处插入字符 int in ...

  9. android edittext 输入手机号码格式变化

    android edittext 输入内容只能是xxx-xxxx-xxxx格式的手机号码 EditText phoneEt = (EditText) findViewById(R.id.phone_e ...

  10. Android EditText设置弹出数字输入法键盘

    Android EditText 设置弹出数字输入法键盘 首先设置只能输入数字: <EditText Android:id="@+id/edit_digit_input" a ...

最新文章

  1. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
  2. 分享一个Vant Weapp小程序UI组件库
  3. sap上线前的十大思考
  4. 中报表导出带表头_来看看Java是 如何优雅的导出 Excel的
  5. 蓝桥杯2015初赛-加法变乘法-枚举
  6. 进入Google:《Google成功的七堂课》读后感
  7. 在php中源代码怎么查看,查看PHP Closure的源代码
  8. DOS状态下可以安装Win XP
  9. ZOJ 3992 2017CCPC秦皇岛 L:One-Dimensional Maze
  10. Jetson tk1 刷机教程
  11. 树莓派gpio接ttl转usb串口调试
  12. Altera 在线资源使用
  13. Typora下载及使用
  14. c语言谱曲软件,基于C语言的音乐谱曲技巧与应用研究
  15. ubuntu降低内核版本
  16. Python爬虫-02 request模块爬取妹子图网站
  17. 如何修改ftp服务器密码,ftp密码,3种修改ftp密码的方法
  18. ABAP SE54 视图簇
  19. PHP array_chunk()函数
  20. 【你知道maven么?】

热门文章

  1. 读书的方法,及基本好书。
  2. 计算机图形学完整笔记(十):绘制技术
  3. 适合12星座看的葛优电影
  4. 小米放言华为没达成的目标,它来完成,将击败三星夺下欧洲第一名
  5. vs2013 gitee强行拉取
  6. Exchange 的 CDO
  7. bshare插件使用
  8. 电磁继电器与固态继电器
  9. 如何让学习成为一种乐趣!
  10. yarn npm 下载依赖报错 An unexpected error occurred: “https://registry.npmjs.org/less