Text Fields

Posted yh_android_blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Text Fields相关的知识,希望对你有一定的参考价值。

概述

文本控件允许用户在你的app中打字。它可以是单行的,也可以是多行的。触摸文本控件所占的空间会显示光标并且自动弹出软键盘。除了打字之外,文本控件允许各种其它活动,如文本选择(剪切,复制,黏贴)和由自动完成功能( auto-completion. )提供的数据查询。 通过包含   EditText  对象, 在你的布局文件中添加一个文本控件,也可以在你的xml布局文件中添加 <EditText>  元素来添加。

指定软键盘类型

文本控件有许多不同的输入类型,如数字,日期,密码或邮箱地址。输入类型决定了何种字符被允许键入文本内,如果频繁使用字符,可以优化虚拟键盘的布局。 你可以指定软键盘的类型,在 EditText  对象中的   android:inputType  属性。例如,如果你想要用户输入的是邮箱地址,你可以使用 textEmailAddress  输入类型:
   
    
     <EditText
    
    
         android:id="@+id/email_address"
    
    
         android:layout_width="fill_parent"
    
    
         android:layout_height="wrap_content"
    
    
         android:hint="@string/email_hint"
    
    
         android:inputType="textEmailAddress" />
    
   
这里有一些可以在不同情况下使用的输入类型。你可以在   android:inputType . 文件中找到它们。 小技巧:为允许用户输入换行符以输入长字符串,使用 "textMultiLine"  类型。默认,一个 EditText对象是只限制于一行文本的,当它超过一行时将需要滑动查看。

控制其它行为

  android:inputType 也允许你指定某些确切的软件盘行为,如是否能够利用所有的新词或者自动拼写和建议。
 android:inputType 属性也允许按位组合(用|操作符来连接多个值),这样你就可以一次性 同时指定键盘布局和 一个或多个行为。例如,下面展示的代码可以允许你收集邮箱地址,利用每一个单词,并且禁用文本建议。
   
    
     <EditText
    
    
         android:id="@+id/postal_address"
    
    
         android:layout_width="fill_parent"
    
    
         android:layout_height="wrap_content"
    
    
         android:hint="@string/postal_address_hint"
    
    
         android:inputType="textPostalAddress|
    
    
                            textCapWords|
    
    
                            textNoSuggestions" />
    
   
详细的行为可以查看   android:inputType  文件。

指定键盘操作

除了改变键盘的输入类型,安卓允许你指定一个当用户完成他们的输入时执行的操作。被指定操作的按钮会出现并替代回车键和它要做出的动作,例如“查找”或“发送” 你可以通过设置   android:imeOptions  属性来指定操作。例如,这段代码指定了一个Send操作:
   
    
     <EditText
    
    
         android:id="@+id/search"
    
    
         android:layout_width="fill_parent"
    
    
         android:layout_height="wrap_content"
    
    
         android:hint="@string/search_hint"
    
    
         android:inputType="text"
    
    
         android:imeOptions="actionSend" />
    
   
如果你并没有明确的指出一个输入动作,  系统会尝试确定是否 之后有包含 android:focusable的(文本)字段。 如果在这之后找到了任何可聚焦的(文本)字段,系统就会提供一个 actionNext 操作来移出 EditText  ,这样用户将可以选择Next来移动到下一个(文本)字段。如果没有,系统提供 "actionDone" 操作。你可以通过设置 android:imeOptions   属性为任何其它的值 来覆盖该操作 ,如 "actionSend"  or  "actionSearch" ,或者使用默认的 "actionNone"  行为。

响应操作按钮事件

如果你使用   android:imeOptions  属性指定了一个键盘操作(如 "actionSend" ),你可以通过使用 TextView.OnEditorActionListener . 来监听这个操作事件。 TextView.OnEditorActionListener接口提供了一个回掉函数   onEditorAction()  ,用操作ID来标明每一个操作类型,如 IME_ACTION_SEND  or  IME_ACTION_SEARCH .。 例如,这段代码展示你如何去监听用户点击Send按钮时的事件:
   
    
     EditText editText = (EditText) findViewById(R.id.search);
    
    
     editText.setOnEditorActionListener(new OnEditorActionListener() 
    
    
         @Override
    
    
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    
    
             boolean handled = false;
    
    
             if (actionId == EditorInfo.IME_ACTION_SEND) 
    
    
                 // Send the user message
    
    
                 handled = true;
    
    
             
    
    
             return handled;
    
    
         
    
    
     );
    
   

设置自定义操作按钮标签

如果键盘太大而不能合理的占用应用下方的空间时(如,当手机设备处于横向时)就会开启全屏。在该模式下(全屏),一个被标记的操作按钮显示在了输入框的旁边。你可以自定义这个按钮上的文本,通过设置 android:imeActionLabel  属性。
   
    
     <EditText
    
    
         android:id="@+id/launch_codes"
    
    
         android:layout_width="fill_parent"
    
    
         android:layout_height="wrap_content"
    
    
         android:hint="@string/enter_launch_codes"
    
    
         android:inputType="number"
    
    
         android:imeActionLabel="@string/launch" />
    
   

添加其它键盘标志

另外的一些操作可以通过 android:imeOptions  属性指定,你可以添加额外的标志来指定其它键盘行为。所有可用的标志都在文件   android:imeOptions 中列出。 例如,图5展示了如何使系统全屏显示文本字段,当手机处于横向(或屏幕空间受限)。你可以禁用全屏输入模式,通过   android:imeOptions属性的 flagNoExtractUi  值,如图6所示。

提供自动补全建议

如果你想给用户的输入提供一些建议,你可以使用   EditText  的子类  AutoCompleteTextView . 为了实现自动补全,你必须指定一个提供建议文本的适配器。有许多现成的适配器可供使用,取决于数据的来源,如来自于数据库或数组。 下面的一段展示了如何设置 AutoCompleteTextView  从数组中提供建议,使用数组适配器 ArrayAdapter :
  1. 在你的布局中添加AutoCompleteTextView  下面这个布局中仅有一个文本字段
         
          
           <?xml version="1.0" encoding="utf-8"?>
          
          
           <AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" 
          
          
               android:id="@+id/autocomplete_country"
          
          
               android:layout_width="fill_parent"
          
          
               android:layout_height="wrap_content" />
          
         
  2. 定义包含所有建议文本的数组。例如,下面有一组在XML资源文件下的定义的数组 (res/values/strings.xml),包含国家名。
         
          
           <?xml version="1.0" encoding="utf-8"?>
          
          
           <resources>
          
          
               <string-array name="countries_array">
          
          
                   <item>Afghanistan</item>
          
          
                   <item>Albania</item>
          
          
                   <item>Algeria</item>
          
          
                   <item>American Samoa</item>
          
          
                   <item>Andorra</item>
          
          
                   <item>Angola</item>
          
          
                   <item>Anguilla</item>
          
          
                   <item>Antarctica</item>
          
          
                   ...
          
          
               </string-array>
          
          
           </resources>
          
         
  3.  在你的Activity 或 Fragment,使用如下的代码来指定适配器来提高建议。
         
          
           // Get a reference to the AutoCompleteTextView in the layout
          
          
           AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
          
          
           // Get the string array
          
          
           String[] countries = getResources().getStringArray(R.array.countries_array);
          
          
           // Create the adapter and set it to the AutoCompleteTextView 
          
          
           ArrayAdapter<String> adapter = 
          
          
                   new ArrayAdapter<String>(以上是关于Text Fields的主要内容,如果未能解决你的问题,请参考以下文章

    Text Fields

    如何访问用户在 VueJS 的这些 v-text-fields 中输入的数据?

    关于网络英语新词的论文

    华为OD机试真题 JS 实现发现新词的数量 /新词挖掘2023 Q1 | 100分

    Elasticsearch 报错:Fielddata is disabled on text fields by default. Set `fielddata=true` on [`your_fi

    大数据新词(中英对照)发布试用