TextView之前已经使用过很多,直接显示,比较简单。但是我们可以同“autoLink”属性,使用户可以点击一个网络连接、电话号码、邮箱地址、地图地址,通过系统应用打开它们。除此之外,还有其他的font属性,minLines,maxLines等等,都很好理解,可以去阅读Android学习笔记系列。
我们在xml中设置<textview ... android:autoLink="email|web" />,可以设置的autoLink的有all,email,map,none(这是缺省值,表示不进行自动链接),phone,web。
tv.setAutoLinkMask(Linkify.ALL);// 设置全部的自动链接
tv.setAutoLinkMask(Linkify.PHONE_NUMBERS |Linkify.WEB_URLS); //设置web和phone
tv.setText(……); //需要注意,设置属性应该在setText()之前,否则该属性不能作用在已设置的text上
在某些情况下,例如只要求临时起作用,我们可能需要在设置text之后,才加上link属性,可用下面的方法。Linkify.addLinkes()还可用于Spannable控件。
tv.setText("My Phone : 87654321");
Linkify.addLinks(tv, Linkify.ALL); //需要注意,将Linkify.addLinkes()放置在setText()之前是不起作用的
EditText是TextView的子类。EditText没有互联网上的功能那么强,例如编辑博客可以输入图片,但是对于手机也提供丰富功能。具体可以看reference,这里介绍2个比较有趣的功能。
hint。可以在EditText中用灰色字体显示提示,当用户点击输入时,该提示消失。在XML中,如下设定:
<EditText .... android:hint="@string/ui_text_et_hint"/>
EditText继承了TextView的一个重要属性是inputType。我们可以设置textAutoCorrect来检测拼写错误,可以通过textCapWords来自动设为每个单词的第一个字母为大写。还可以设置要求输入格式,例如textUri,textEmailAddress,textPassword等等。
<EditText .... android:inputType="textPersonName|textCapWords"/>
在老的版本中,很多属性都被移到inputType中设置,如果我们在xml中设置了inputType,这些过期的属性将会不起作用,例如android:capitalize。
新老版本中需要注意多行的问题,在老版本中,缺省是多行的,及当行不能全部显示,自动在下一行显示,如要单行显示则需要设置android:singleLine。但是当XML的属性设置了inputType,则缺省是单行的,如果要多行,则需设置android:inputType="textMultiLine"。
自动完成的control例子如上。XML如下:
<TextView ...... />
<AutoCompleteTextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ui_text_auto"/>
代码如下:
AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.ui_text_auto);
//创建一个一个adpater类,包含有建议项,和显示建议的control
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, //显示建议内容的control
new String[]{"Chinese","English","French","Greek"}); //建议项
//关联adapter
actv.setAdapter(aa);
AutoCompleteTextView匹配整个text view,有时,我们希望能像句子一样可以每个单词进行匹配,这种情况需要用到MultiAutoCompleteTextView。
XML例子如下:
<MultiAutoCompleteTextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ui_text_auto_multi"/>
代码如下。同样要通过adapter设置建议项,以及显示建议项的control,并通过setAdapter()与该控件相关联。此外,还需要通过Tokenizer告诉系统什么时候重新进行匹配。
MultiAutoCompleteTextView mt =(MultiAutoCompleteTextView) findViewById(R.id.ui_text_auto_multi);
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line,
new String[]{"Chinese","English","French","Greek","Spainish"});
mt.setAdapter(aa);
//通过setTokenizer()告之以什么作为分割,什么时候开始进行匹配。通过实现MultiAutoCompleteTextView.Tokenizer接口,提供分割方式。系统已经实现了两个,一个是CommaTokenizer,以逗号为分割(包括先后有空格),另一个是Rfc822Tokenizer,用于email格式。如要自己实现,可以参考系统实现的两个例子。
mt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
相关链接: 我的Android开发相关文章