Android的輸入法

jopen 12年前發布 | 43K 次閱讀 Android Android開發 移動開發

對Android設備,可能是無物理鍵盤,可能帶鍵盤,也可能帶數字鍵盤,這些都是可以處理的。

inputType:IME可自動適配所設的輸入類型

如果沒有物理鍵盤,當用戶進入EditText的時候,將調起IME(Imput Method Editor)。一般情況下,IME都是智能地彈出,并不需要我們作任何的處理,但是在某些特定的情況下,例如一個多行EditText中,IME會覆蓋部分的部分的內容,這時候,我們就需要考慮了。此外還有密碼輸入,限制類型輸入(數字,電話好嗎,日期,時間等),可以通過 android:inputType來進行設定,inputType里面可以設置多個屬性,實行“|”來分割,主義屬性和"|"之間不要有空格。下面是一個例子

<?xml version="1.0" encoding="utf-8"?>
<TableLayout ......  android:stretchColumns="1">

      <TableRow>
          <TextView android:text="No Special rules:" />
          <EditText /> <!--inputType缺省為text方式-->
      </TableRow>
      <TableRow>
          <TextView android:text="Email address:" />
          <EditText android:inputType="text|textEmailAddress" />
      </TableRow>
      <TableRow>

          <TextView android:text="Signed decimal number:" />
          <EditText android:inputType="number|numberSigned|numberDecimal" />
      </TableRow>
      <TableRow>

          <TextView android:text="Date:" />
          <EditText android:inputType="date" />
      </TableRow>
    <TableRow>

          <TextView android:text="Multi-line text:" />
          <EditText android:inputType="text|textMultiLine|textAutoCorrect"android:minLines="3" android:gravity="top"/>
      </TableRow>
</TableLayout>

在《Begining Book》中給出的IME和我的模擬器的不一樣,模擬器采用的是T9數字鍵盤方式,由于設置了不同的顯示要求,因此鍵盤的出現也會有所不同。如下兩圖所示:

Android的輸入法

IME可通過確認鍵進行事件觸發

最右下角的button成為accessory button,也就是確認鍵,我們可以通過android:imeOptions來設置相關的處理,例如:

          <TextView android:text="Signed decimal number:" />
          <EditText android:inputType="number|numberSigned|numberDecimal"

            android:imeOptions="actionDone"/>

缺省地,按下accessroy button,將會focus到下一個editText,但是我們可以定制這個行文。例如上面的例子,當我們按確認鍵時,IME鍵盤將會消失,表示IME已經處理完了。我們看另外一個例子:

          <EditText android:id="@+id/c10_send"
            android:inputType="text|textEmailAddress"

            android:imeOptions="actionSend"/>

這是一個Email地址格式,我們希望用戶按了IME的確認鍵之后可以進行觸發,在程序中如下處理,我們可以監測到IME_ACTION_SEND的actionId。:

        TextView edit = (TextView)findViewById(R.id.c10_send);
        edit.setOnEditorActionListener(new TextView.OnEditorActionListener(){
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if(actionId == EditorInfo.IME_ACTION_SEND)
                    Log.d("WEI","Receive ime : IME_ACTION_SEND ");
                return false;
            }
        });

IME的適配

在上面的例子中,如果我們點擊第一個editText,IME會overlay最下面的widget,如果我們點擊最下面的editText,整個 layout就會向上scroll,這種成為pan適配方式。Android可以resize我們的acitivity,使其變小以便IME可以在 activity的下面。這種是resize適配。在landscape模式(橫屏)模式下,Android有可能會將IME全屏,覆蓋整個 acivity,這允許更大的軟鍵盤方便用戶輸入。

一般的,Android會根據layout的情況選擇pan方式或者resize方式,如果我們需要指定,可以在AndroidManifest.xml文件中的acivity里面設置android:windowSoftInputMode屬性,下面是一個例子:

        <activity android:name=".Chapter10.Chapter10Test2" android:label="@string/chapter_10_test2"
          android:windowSoftInputMode="adjustResize"/>

我們將我們上面的例子最后一個EditText中android:minLines="5",使他具有更大空間,下面的兩個圖,左圖采用缺省模式,右圖,強制指定采用 android:windowSoftInputMode="adjustResize"模式。

Android的輸入法

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!