EditText 文字验证
android:numeric="integer"??只允许输入整数
android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入
?
android:digits="1234567890qwertyuiopasdfghjklzxcvbnm_" ??如果输入中文是不会显示
?
android:hint="请输入数字!" ??设置显示在空间上的提示信息
android:singleLine="true" ? ? ??设置单行输入,一旦设置为true,则文字不会自动换行。
android:password="true" ? ? ? ? ??设置只能输入密码
android:textStyle="bold"
android:capitalize = "characters" ??以大写字母写
android:textScaleX="1.5" ? ?控制字与字之间的间距
android:typeface="monospace" ??字型,normal, sans, serif, monospace
android:background="@null" ?空间背景,这里没有,指透明
android:editable="false" 设置EditText不可编辑
?android:ellipsize="end" 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时
?
?
?
?
?????????<?EditText
???????????????????android:id?=?"@+id/EditText01"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:hint?=?"type something here...?请输入?..."????????????????????????????//?输入提示
???????????????????android:textColorHint?=?"#FF00FF"?????????????????????????????????????????????????????//?提示文字的颜色
???????????????????android:lines?=?"4"?????????????????????????????????????????????????????????????????????????????????//?行数
???????????????????android:gravity?=?"top"???????????????????????????????????????????????????????????????????????????//?上对齐
???????????????????android:scrollbars?=?"vertical"?????????????????????????????????????????????????????????????//?垂直滚动条
?????????/>
在布局文件中,增加类似如下代码:
?????????<?EditText
???????????????????android:id?=?"@+id/EditText02"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:textSize?=?"50sp"
???????????????????android:textColor?=?"#FF0000"
???????????????????android:background?=?"#007F00"
?????????/>
?
得到的结果如下:
?
?
?
?
输入过滤器,可以用来规范在?EditText?中输入的内容。比如:
???? ???EditText txt02 = (EditText)findViewById(R.id.?EditText02?);
????????txt02.setFilters(?new?InputFilter[]
???????????????{
????????????????????new?InputFilter.AllCaps(),
????????????????????new?InputFilter.LengthFilter(2)
???????????});
class?CustomizedInputFilter?implements?InputFilter
{
??????????????public?CharSequence filter(CharSequence source,?int?start,?int?end,
?????????????????????Spanned dest,?int?dstart,?int?dend)
??????????????{
//????????????Log.e("debug", (String)source);
//????????????return (new String((String)source).toUpperCase());
?????????????????????//?下面是?InputFilter.AllCaps()?的源代码
?????????????????????for?(?int?i = start; i < end; i++)
????????????????? ???{
????????????????????????????if?(Character.isLowerCase?(source.charAt(i)))
???????????????????????? ???{
???????????????????????????????????char?[] v =?new?char?[end - start];
???????????????????????????????????TextUtils.getChars?(source, start, end, v, 0);
???????????????????????????????????String s =?new?String(v).toUpperCase();
?
????????????????????????????? ? ???if?(source?instanceof?Spanned)
???????????????????????????????????{
??????????????????????????????????????SpannableString sp =?new?SpannableString(s);
??????????????????????????????????????TextUtils.copySpansFrom?((Spanned) source, start, end,?null?, sp, 0);
??????????????????????????????????????return?sp;
???????????????????????????????????}
???????????????????????????????????else
???????????????????????????????????{
??????????????????????????????????????return?s;
???????????????????????????????????}
?????????????????????????????}
?????????????????????}
?????????????????????return?null?;?// keep original
??????????????}
???????}
?
?????????<?EditText
???????????????????android:id?=?"@+id/EditText03"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:password?=?"true"?????????????????????????????????????????????????//?密码输入框,会屏蔽输入的字符
?????????/>
????????
?????????<?EditText
???????????????????android:id?=?"@+id/EditText04"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:enabled?=?"false"??????????????????????????????????????????????????//?设定活动状态为?false?,既不能编辑,也不能
?????????/>????????????????????????????????????????????????????????????????????????????????????????????????? ????// focusable
AutoCompleteTextView?可以被认为是一种特殊的?EditText?,用户在?AutoCompleteTextView?中输入部分字符,就会得到和该输入字符匹配的列表,该列表由开发人员事先提供,用户只需要选择其中之一即可,这样可以节省用户输入的字符数,同时也可以减少出错的机会。比如,在布局文件?main.xml?中,有如下代码:
?????????<?AutoCompleteTextView
???????????????????android:id?=?"@+id/AutoCompleteTextView01"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:completionHint?=?"Pick a country or type your own"????????????????????????? ??//?下拉列表的提示
???????????????????android:dropDownHeight?=?"120px"?????????????????????????????????????????????????????????????????????//?下拉列表的高度
???????????????????android:completionThreshold?=?"1"??????????????????????????????????????????????????????????????????????//?键入多少字符,即可出现下拉列表
?????????/>
?
在?Activity?对应的?java?文件中:
public?class?ControlEditText?extends?Activity
{
???????//?定义一个字符串数组
???????????????final?String[]?COUNTRIES?= {?"China"?,?"Cuba"?,?"Costa Rica"?,
????????????????????????"Columbia"?,?"Canada"?,?"America"?,
????????????????????????"Africa"?,?"Belgium"?,?"India"?};
???????????????@Override
???????????????public?void?onCreate(Bundle savedInstanceState)
???????????????{
????????????????????super?.onCreate(savedInstanceState);
????????????????????setContentView(R.layout.?main?);
???????
?????????????????????//?构建一个?ArrayAdapter?对象
????????????????????ArrayAdapter<String> adapter =?new?ArrayAdapter<String>(?this?,
?????????????????????????????android.R.layout.?simple_dropdown_item_1line?,
?????????????????????????????COUNTRIES?);
???????
????????????????????//?获取?AutoCompleteTextView?对象?text
????????????????????AutoCompleteTextView text = (AutoCompleteTextView)findViewById(R.id.?AutoCompleteTextView01?);
????????????????????//?给?text?指定?ArrayAdapter?对象
????????????????????text.setAdapter(adapter);
???????????????}
}
?
?
其中用到的?ArrayAdapter?构造方法说明如下:
public ArrayAdapter (?Context?context, int textViewResourceId, T[] objects)
?
Parameters
contextThe current context.
textViewResourceId
The resource ID for a layout file containing a TextView to use when instantiating views.
在?android.R.layout?包下,定义了许多诸如?simple_dropdown_item_1line?这样的?TextView?资源ID
objects
The objects to represent in the ListView.
?
运行代码,得到的结果如下:
?
?
输入一个字符?c?,则?adapter?中所有以?c(?缺省地,不区分大小写?)?大头的国家,会全部显示在下拉列表中,用户仅需要做一个简单的选择就可以了。如果?android:completionThreshold?的属性为?"2"?,那么用户需要输入两个字符,下拉列表才会出现。
MultiAutoCompleteTextView?也可以被认为是一种特殊的?EditText?,它的作用基本上和?AutoCompleteTextView?一样:用户在MultiAutoCompleteTextView?中输入部分字符,就会得到和该输入字符匹配的列表,该列表由开发人员事先提供,用户只需要选择其中之一即可,这样可以节省用户输入的字符数,同时也可以减少出错的机会。
?
它和?AutoCompleteTextView?唯一不同的地方就是:?AutoCompleteTextView?只有第一个输入的单词可以?auto complete?,而MultiAutoCompleteTextView?,则可以多次进行?auto complete?。在使用?MultiAutoCompleteTextView?的时候,要提供tokenizer?,?tokenizer?用于分隔单词。比如,在布局文件?main.xml?中,有如下代码:
?????????<?MultiAutoCompleteTextView
???????????????????android:id?=?"@+id/MultiAutoCompleteTextView01"
???????????????????android:layout_width?=?"fill_parent"
???????????????????android:layout_height?=?"wrap_content"
???????????????????android:completionHint?=?"Pick a country or type your own"
???????????????????android:dropDownHeight?=?"120px"
???????????????????android:completionThreshold?=?"1"
?????????/>
?
在?Activity?对应的?java?文件中:
public?class?ControlEditText?extends?Activity
{
???????????????final?String[]?COUNTRIES?= {?"China"?,?"Cuba"?,?"Costa Rica"?,
????????????????????????"Columbia"?,?"Chizen"?,?"Canada"?,?"America"?,
????????????????????????"Africa"?,?"Belgium"?,?"India"?};
???????????????@Override
???????????????public?void?onCreate(Bundle savedInstanceState)
???????????????{
????????????????????super?.onCreate(savedInstanceState);
????????????????????setContentView(R.layout.?main?);
???????
????????????????????ArrayAdapter<String> adapter =?new?ArrayAdapter<String>(?this?,
?????????????????????????????android.R.layout.?simple_dropdown_item_1line?,
?????????????????????????????COUNTRIES?);
???????
????????????????????AutoCompleteTextView text = (AutoCompleteTextView)findViewById(R.id.?AutoCompleteTextView01?);
????????????????????text.setAdapter(adapter);
???????
????????????????????//?获取?MultiAutoCompleteTextView?对象?text
????????????????????MultiAutoCompleteTextView mtext =
??????????????????????????????????????(MultiAutoCompleteTextView)findViewById(R.id.?MultiAutoCompleteTextView01?);
????????????????????//?依然使用前面构造好的?ArrayAdapter?对象
????????????????????mtext.setAdapter(adapter);
?????????????????????//?指定分隔符?”,”
????????????????????mtext.setTokenizer(?new?MultiAutoCompleteTextView.CommaTokenizer());
???????????????}
}
我们可以看到,输入?c?,然后可以在下拉列表中选择?China?,会自动增加一个分隔符。此时,输入?a?,则会把和?a?匹配的America?以及?Africa?显示在下拉列表中。
?
如果我们把?COUNTRIES?数组中的内容改为中文:
final?String[]?COUNTRIES?= {?"?印度?"?,?"?印度尼西亚?"?,?"?新加坡?"?,
???????????????"?新赤道几内亚?"?,?"?巴基斯坦?"?,?"?南非?"?,?"?南斯拉夫?"?,
???????????????"?北非?"?,?"?北爱尔兰?"?,?"?巴勒斯坦?"?};
可以看到,?AutoCompleteTextView?和?MultiAutoCompleteTextView?都支持中文:
?
?
?
?