Pro Android学习笔记(十四):用户界面和控制(2):Text类控制

TextView

TextView之前已经使用过很多,直接显示,比较简单。但是我们可以同“autoLink”属性,使用户可以点击一个网络连接、电话号码、邮箱地址、地图地址,通过系统应用打开它们。除此之外,还有其他的font属性,minLines,maxLines等等,都很好理解,可以去阅读Android学习笔记系列。

例子1:在XML中设置autoLink属性

Pro Android学习笔记(十四):用户界面和控制(2):Text类控制_第1张图片

我们在xml中设置<textview ... android:autoLink="email|web" />,可以设置的autoLink的有all,email,map,none(这是缺省值,表示不进行自动链接),phone,web。

例子2:在代码中设置autoLink属性

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

EditText是TextView的子类。EditText没有互联网上的功能那么强,例如编辑博客可以输入图片,但是对于手机也提供丰富功能。具体可以看reference,这里介绍2个比较有趣的功能。

Pro Android学习笔记(十四):用户界面和控制(2):Text类控制_第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"。

AutoCompleteTextView

Pro Android学习笔记(十四):用户界面和控制(2):Text类控制_第3张图片

自动完成的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);

MultiAutoCompleteTextView

AutoCompleteTextView匹配整个text view,有时,我们希望能像句子一样可以每个单词进行匹配,这种情况需要用到MultiAutoCompleteTextView。

Pro Android学习笔记(十四):用户界面和控制(2):Text类控制_第4张图片

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开发相关文章

你可能感兴趣的:(Pro Android学习笔记(十四):用户界面和控制(2):Text类控制)