android EditText inputType 及 android:imeOptions=”actionDone”


一、android 軟件盤事件響應
在android中,有時需要對EditText實現軟件盤監聽的場景。當android按下軟鍵盤的時候,響應完成、發送、搜索或者其他事件。
Google 提供了 EditorInfo、 KeyEvent 的一些方法,能夠實現我們需要的功能。詳細可研究:EditorInfo.class 和 KeyEvent.class.
 
輸入回車鍵隱藏輸入鍵盤的方法:

如果布局中包含多個EditText,可以為每個EditText控件設置android:singleLine=”true”,彈出的軟盤輸入法中回車鍵為next,直到最后一個獲取焦點后顯示為Done。點擊Done后,隱藏輸入盤。將EditText的imeOptions屬性設置android:imeOptions=”actionDone”,則不管是不是最后一個EditText,點擊回車鍵即隱藏輸入法。

監聽Enter的事件,編寫Enter的事件響應。設置文本框的OnKeyListener,當keyCode ==KeyEvent.KEYCODE_ENTER的時候,表明Enter鍵被按下,就可以編寫自己事件響應功能了。

XML文件如下:

   <EditText
            android:id="@+id/editTextId"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:imeOptions="actionDone"
            android:hint="@string/task_new_one"
            android:textSize="15sp"
            android:singleLine="true"
            android:paddingLeft="5dp"
            android:layout_gravity="center"
            android:background="@drawable/rectangle"
            android:inputType="text"
            >
    </EditText>

  

 

把EditText的Ime Options屬性設置成不同的值,Enter鍵上可以顯示不同的文字或圖案。
actionNone : 回車鍵,按下后光標到下一行
actionGo : Go,
actionSearch : 一個放大鏡
actionSend : Send
actionNext : Next
actionDone : Done,隱藏軟鍵盤,即使不是最后一個文本輸入框

通過修改 android:imeOptions 來改變默認的鍵盤顯示文本。常用的常量值如下:
  1. actionUnspecified  未指定,對應常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:
  2. actionNone 沒有動作,對應常量EditorInfo.IME_ACTION_NONE 效果:
  3. actionGo 去往,對應常量EditorInfo.IME_ACTION_GO 效果:
  4. actionSearch 搜索,對應常量EditorInfo.IME_ACTION_SEARCH 效果: 
  5. actionSend 發送,對應常量EditorInfo.IME_ACTION_SEND 效果:
  6. actionNext 下一個,對應常量EditorInfo.IME_ACTION_NEXT 效果:
  7. actionDone 完成,對應常量EditorInfo.IME_ACTION_DONE 效果:
     
JAVA代碼:
EditText inputText = (EditText) findViewById(R.id. editTextId);   
inputText.setImeOptions(EditorInfo.IME_ACTION_DONE);

  

添加監聽事件:
 private final EditText.OnEditorActionListener editorActionListener =
            new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {
                        //業務代碼
                        haoMent.createTest(Test.getId(), v.getText().toString());
                        UiUtils.hideSoftKeyboard(getApplicationContext(), haoTest.this);
                        v.setText("");
                        v.clearFocus();
                        handler.post(updateView);
                    }
                    return true;
                }
           };

  

            
但是,如果手機的輸入法不是內置輸入法,而是其他第三方輸入法,那么可能會發生軟件盤回車鍵無響應的問題。為了防止該類事情,則增加紅色部分,響應的其KeyEvent。
這時候需要在代碼中添加事件響應。

inputKey = (EditText) findViewById(R.id.contactSearch_editText);
inputKey.addTextChangedListener(watcher);

inputKey.setOnKeyListener(new View.OnKeyListener() {
@Override
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    

  if (KeyEvent.KEYCODE_ENTER == keyCode && event.getAction() == KeyEvent.ACTION_DOWN) {
    handler.post(updateView);
    return true;
  }
  return false;
  }
});
//響應鍵盤內容
public TextWatcher watcher = new TextWatcher() {

  @Override
  public void beforeTextChanged(CharSequence charSequence, int i, int i2,int i3) {

  }

  @Override
  public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {

  }

  @Override
  public void afterTextChanged(Editable editable) {

  handler.post(updateView);

  }
};

 
 
二、android 輸入類型
根據要輸入的內容展現相應的軟件盤,可通過修改 android:inputType 來實現。
這是一些常用的輸入類型。
android:inputType="none"--輸入普通字符
android:inputType="text"--輸入普通字符
android:inputType="textCapCharacters"--輸入普通字符
android:inputType="textCapWords"--單詞首字母大小
android:inputType="textCapSentences"--僅第一個字母大小
android:inputType="textAutoCorrect"--前兩個自動完成
android:inputType="textAutoComplete"--前兩個自動完成
android:inputType="textMultiLine"--多行輸入
android:inputType="textImeMultiLine"--輸入法多行(不一定支持)
android:inputType="textNoSuggestions"--不提示
android:inputType="textUri"--URI格式
android:inputType="textEmailAddress"--電子郵件地址格式
android:inputType="textEmailSubject"--郵件主題格式
android:inputType="textShortMessage"--短消息格式
android:inputType="textLongMessage"--長消息格式
android:inputType="textPersonName"--人名格式
android:inputType="textPostalAddress"--郵政格式
android:inputType="textPassword"--密碼格式
android:inputType="textVisiblePassword"--密碼可見格式
android:inputType="textWebEditText"--作為網頁表單的文本格式
android:inputType="textFilter"--文本篩選格式
android:inputType="textPhonetic"--拼音輸入格式
android:inputType="number"--數字格式
android:inputType="numberSigned"--有符號數字格式
android:inputType="numberDecimal"--可以帶小數點的浮點格式
android:inputType="phone"--撥號鍵盤
android:inputType="datetime"
android:inputType="date"--日期鍵盤
android:inputType="time"--時間鍵盤

 

密碼框屬性 android:password="true"   讓EditText顯示的內容自動為星號,輸入時內容會在1秒內變成*字樣。
純數字 android:numeric="true"      讓輸入法自動變為數字輸入鍵盤,同時僅允許0-9的數字輸入
僅允許 android:capitalize="haoTest"   僅允許接受輸入haoTest,一般用於密碼驗證
android:editable="false"         設置EditText不可編輯
android:singleLine="true"        強制輸入的內容在單行
android:ellipsize="end"         自動隱藏尾部溢出數據,一般用於文字內容過長一行無法全部顯示時
(部分屬性參考網絡:http://blog.csdn.net/lushengchu_luis/article/details/8699791、http://www.eoeandroid.com/thread-313140-1-1.html)
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM