EditText的一点深入的了解
最近在开发android下的记事本程序时,频繁的使用EditText控件,折腾来折腾去,算是对其的了解更深入了一些。特将这些收获记录如下:
一、几个属性的介绍
android:gravity="top"
这个属性为top可以将光标置于左上角(当EditText设为全屏时)
android:background="@null"
这个属性为null可以将输入的框线去掉
android:textCursorDrawable="@drawable/ic_launcher"
这个属性可以设置光标为drawable样式(可以为一张图片)
android:editable="false"
这个属性为false,则EditText不可编辑。注意是仅仅不能进行输入,但是EditText的滚动什么的还是可以响应的。
android:enabled="false"
这个属性为false,则EditText也是不可编辑。注意不仅不可编辑,连滚动什么的都不可以响应,所以可以说是直接让EditText不可用。
android:cursorVisible="false“
这个属性为false,则EditText的光标不可见。
android:focusableInTouchMode="false"
这个属性为false,则EditText不响应触摸模式的焦点,或者说触摸事件不可用。
===========================================================================================
二、监听EditText的输入
可以使用TextWatcher来监听EditText的输入。使用方法如下:
Et.addTextChangedListener(new TextWatcher() {
//S:变化后的所有字符;start:字符起始的位置;before: 变化之前的总字节数;count:变化后的字节数
public void onTextChanged(CharSequence s, int start, int before, int count) { } //s:变化前的所有字符; start:字符开始的位置; count:变化前的总字节数;after:变化后的字节数
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
//s:变化后的所有字符
public void afterTextChanged(Editable s) {
}
});
因此如果有需要,或者对EditText做一些个性化的设置,即可以使用addTextChangedListener来为EditText添加监听器!
=========================================================================================
三、制作只读的EditText控件
首先说明一下需求:该EditText只会禁止输入,但是可以查看,滚动和触摸什么的都会响应,也就是说仅仅是禁止输入而已!不妨称之为只读模式。
怎么制作出一个这样子的EditText呢?网上有很多办法,我几乎都一一试过,但是所使用的方法都无法达到满意。比如:
(1)如果通过设定android:editable属性来使EditText不可输入。这个虽然能完美的达到要求。但是,当EditText又需要恢复可输入状态时,没有相应的动态代码来恢复!
(2)如果使用android:enabled属性,则会使EditText整个不可用,也就是说不仅不可输入,连滚动什么的都不用了。
最后,理了理思路,终于解决了这个问题。达到我的预期:即EditText只读模式达到了,在恢复其可编辑状态时也能很容易的恢复。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我的做法如下:
制作出一个只读模式的EditText 其实很简单进行下面两步设定即可: (1)只读模式,当然不需要显示光标了。在xml中设置如下即可: android:cursorVisible="false“ (2)只读模式当然不需要弹出输入法了,输入法不弹出,当然就不能编辑了。为了点到EditText不让弹出输入法,我们只需让其对触摸事件不响应即可: android:focusableInTouchMode="false"
经过上面两步简单的设定,就可以让EditText为只读模式了。
然后恢复EditText为可编辑: 根据上面的设定,因此想要将EditText恢复为可编辑状态,只需要下面两行代码即可: editText.setFocusableInTouchMode(true);
editText.setCursorVisible(true);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
另外需要说明的是,也可以利用下面的方法动态的设定EditText的可输入与不可输入状态。
动态设定EditText不可输入任何字符
//设置EditText不可输入。但保留滑动,可点击等属性。只是不可输入而已
et.setFilters(new InputFilter[] { new InputFilter() { @Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
}
} });
这样,利用上面的代码,即使你利用输入键盘输入,也无法输入到EditText中。对应的,相应的恢复输入可采用下面的代码:
//设置输入法可以输入(或者叫恢复输入)
et.setFilters(new InputFilter[] { new InputFilter() { public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
return null;
}
} });
=================================================================================
四、不自动弹出输入法的键盘
当你的布局中含有一个EditText中的时候,你会发现只要你进入这个活动的界面,输入法键盘就会自动弹出来。在你不打算首先给EditText做输入的时候,
这个自动弹出的输入法则是非常惹人讨厌的!因此可以利用下面的两种办法来禁止因为有了EditText而自动弹出输入法:
(1)方法一 经过测验,如果EditText和TextView在一起的话,那么输入法就不会自动弹出。这是由于TextView本身的特性导致的。顺便说一句,EditText本身就是继承自TextView的。 因此,你可以放一个TextView到你的布局中,来防止自动弹出输入法。 (2)方法二 还可以利用代码动态设定不弹出输入法。只需要在合适的地方,写下下面的代码即可。下面的代码就是让EditText默认不显示软键盘,只有当被点击的时候才会显示出软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
=========================================================================================
五、设置EditText显示为密码格式
有两种方式,即在xnl中和利用代码动态设定。如下:
(1)方式一 android:inputType="textPassword" (2)方式二 edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
inputType即为输入字符的类型。在这里网上有个很好的总结,如下:
1 android:inputType参数类型说明
2 android:inputType="none"--输入普通字符
3 android:inputType="text"--输入普通字符
4 android:inputType="textCapCharacters"--输入普通字符
5 android:inputType="textCapWords"--单词首字母大小
6 android:inputType="textCapSentences"--仅第一个字母大小
7 android:inputType="textAutoCorrect"--前两个自动完成
8 android:inputType="textAutoComplete"--前两个自动完成
9 android:inputType="textMultiLine"--多行输入
10 android:inputType="textImeMultiLine"--输入法多行(不一定支持)
11 android:inputType="textNoSuggestions"--不提示
12 android:inputType="textUri"--URI格式
13 android:inputType="textEmailAddress"--电子邮件地址格式
14 android:inputType="textEmailSubject"--邮件主题格式
15 android:inputType="textShortMessage"--短消息格式
16 android:inputType="textLongMessage"--长消息格式
17 android:inputType="textPersonName"--人名格式
18 android:inputType="textPostalAddress"--邮政格式
19 android:inputType="textPassword"--密码格式
20 android:inputType="textVisiblePassword"--密码可见格式
21 android:inputType="textWebEditText"--作为网页表单的文本格式
22 android:inputType="textFilter"--文本筛选格式
23 android:inputType="textPhonetic"--拼音输入格式
24 android:inputType="number"--数字格式
25 android:inputType="numberSigned"--有符号数字格式
26 android:inputType="numberDecimal"--可以带小数点的浮点格式
27 android:inputType="phone"--拨号键盘
28 android:inputType="datetime"
29 android:inputType="date"--日期键盘
30 android:inputType="time"--时间键盘
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在这里再插一句吧。说一下EditText或者TextView中的setInputType和setTransformationmethod方法。
(1)setinputType可以设置EditText(TextView也可以)的输入方式。比如Contact、Email、Date、Time、Short Message、Normal Text、Password 等。
还可以指定各种更正选项,如 单词首字母大写、句子首字母大写、自动更正等。下面的代码是一个使用范例:
int inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
| InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
| InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE;
EditText.setInputType(inputType);
(2)setTransformationMethod 则可以支持将输入的字符转换,包括清除换行符、转换为掩码。使用方法:
textView.setTransformationMethod(PasswordTransformationMethod.getInstance());
综合来说,如果需要实现自己的转换,可以通过实现 TransformationMethod 接口来达到你的目的(比如让输入的所有字符都变成 a,或者输入 a 显示 z,输入 z 显示 a 等)。
=========================================================================================
EditText的一点深入的了解的更多相关文章
- 关于EditText的一点深入的了解
最近在开发android下的记事本程序时,频繁的使用EditText控件,折腾来折腾去,算是对其的了解更深入了一些.特将这些收获记录如下: 一.几个属性的介绍 android:gravity=&quo ...
- 玩转Android之Drawable的使用
Drawable天天用,可你是否对Drawable家族有一个完整的认知?今天我们就来系统的学习一下Drawable的使用. 1.概述 用过Drawable的筒子都知道Drawable有很多种,有的时候 ...
- Android中有关relativeLayout 和EditText的一些属性
http://www.cnblogs.com/jqyp/archive/2010/10/23/1859182.html RelativeLayout用到的一些重要的属性: 第一类:属性值为true ...
- EditText使用详解-包含很多教程上看不到的功能演示
写道 标题有点大,说是详解,其实就是对EditText的一些常用功能的介绍,包括密码框,电话框,空白提示文字等等的讲解,尽量的介绍详细一点,也就是所谓的详解了..呵呵 广告一下我的应用“我团”,最新1 ...
- Android 动态背景的实现以及SurfaceView中添加EditText控件
首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...
- Android EditText自动弹出输入法焦点
http://mobile.51cto.com/aprogram-403138.htm 1. 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...
- Android学习小Demo一个显示行线的自定义EditText
今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...
- Android 根据EditText搜索框ListView动态显示数据
根据EditText搜索框ListView动态显示数据是根据需求来的,觉得这之中涉及的东西可能比较的有意思,所以动手来写一写,希望对大家有点帮助. 首先,我们来分析下整个过程: 1.建立一个layou ...
- Android学习笔记-EditText(输入框)(二)
6.控制EditText四周的间隔距离与内部文字与边框间的距离 我们使用margin相关属性增加组件相对其他控件的距离,比如android:marginTop = "5dp" 使用 ...
随机推荐
- onS 记录
1.用户的解锁 用户因多次登录失败而被锁的情况下,可用faillog命令来解锁.具体如下 ...
- 《高性能Javascript》读书笔记-2
第二章 数据存取 字面量: 代表自身 不存特定位置 :字符串 数字 bool 对象 array 函数 正则表达 本地变量: var 数组: 存储在js数组对象内部,以数字做索引 对象成员 存储在 ...
- kettle 连接Hadoop 遇错
kettle从windows中往hdfs中写文件
- [ An Ac a Day ^_^ ] hdu 1662 Trees on the level 数据结构 二叉树
紫书上的原题 正好学数据结构拿出来做一下 不知道为什么bfs的队列一定要数组模拟…… 还可以练习一下sscanf…… #include<stdio.h> #include<iostr ...
- BestCoder Round #86 A B C
这次BC终于不像上次一样惨烈 终于A了三题…… 终测ing…… 发一波题解…… A.Price List A题十分无脑 只要把所有数加起来存到sum里 询问的时候大于sum输出1 否则输出0就行了…… ...
- G - 娜娜梦游仙境系列——梦醒
G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- quicksort快排
废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...
- localStorage请使用getItem 和setITem
最近看别人的代码,发现他们在从localStorage里面的时候喜欢用dot来操作,而不是get setItem,记得以前说过这个事.下面再说一次吧. 用dot方式来操作( 每次以'hello'= ...
- PeekMessage与GetMessage的对比
PeekMessage与GetMessage的对比相同点:PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中 的消息派发出去. 不同点:无论应用程序消息队 ...
- UIDynamic物理仿真
UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象, 比如重力.弹性碰撞等现象,UIKit动力具有可组合.可重用和声明式 ...