一美浦、輸入法的顯示和隱藏
1输莺、配置 進入頁面自動顯示輸入法
AndroidManifest.xml 中配置windowSoftInputMode屬性
android:windowSoftInputMode="adjustPan|stateVisible"
該屬性主要影響兩件事情:
【一】當(dāng)有焦點產(chǎn)生時戚哎,軟鍵盤是隱藏還是顯示
【二】是否減少活動主窗口大小以便騰出空間放軟鍵盤
【A】stateUnspecified:軟鍵盤的狀態(tài)并沒有指定,系統(tǒng)將選擇一個合適的狀態(tài)或依賴于主題的設(shè)置
【B】stateUnchanged:當(dāng)這個activity出現(xiàn)時嫂用,軟鍵盤將一直保持在上一個activity里的狀態(tài)型凳,無論是隱藏還是顯示
【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【D】stateAlwaysHidden:當(dāng)該Activity主窗口獲取焦點時嘱函,軟鍵盤也總是被隱藏的
【E】stateVisible:軟鍵盤通常是可見的
【F】stateAlwaysVisible:用戶選擇activity時甘畅,軟鍵盤總是顯示的狀態(tài)
【G】adjustUnspecified:默認設(shè)置,通常由系統(tǒng)自行決定是隱藏還是顯示
【H】adjustResize:該Activity總是調(diào)整屏幕的大小以便留出軟鍵盤的空間往弓。主布局可能出現(xiàn)壓縮變形疏唾。
【I】adjustPan:當(dāng)前窗口的內(nèi)容將自動移動以便當(dāng)前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。主布局會自動上移函似,導(dǎo)航欄也會移出顯示區(qū)域槐脏。
2、手動顯示和隱藏輸入法
(1)方式一:
顯示輸入法:showSoftInput
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(ed_editTextView,InputMethodManager.SHOW_FORCED);
隱藏輸入法:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(ed_editTextView.getWindowToken(),0);
(2)方式二
使用toggleSoftInput() 來切換 輸入的顯示和隱藏:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
二撇寞、EditText多行顯示,并且監(jiān)聽鍵盤的回車鍵按下動作顿天。
在做項目的過程中 可能會遇到這樣的需求:點擊EditText彈出輸入法,用戶可以輸入多行能容,點擊回車鍵重抖,將用戶輸入內(nèi)容進行采集露氮,隱藏軟鍵盤,并將信息發(fā)送出去(如微信聊天頁面 輸入文本消息,進行發(fā)送操作)
1钟沛、嘗試一:
(1)配置EditText:
? ? <android:id="@+id/ed_editTextView"
? ? ? ? ?android:layout_width="match_parent"
? ? ? ? android:layout_height="wrap_content"
????? ? android:layout_alignParentBottom="true"
? ? ????android:imeOptions="actionSend"
? ? ????android:inputType="textMultiLine"
? ? />
(2)為EditText設(shè)置setOnEditorActionListener,檢測用戶點擊回車鍵的動作
ed_editTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() { ????@Override public
? ? boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
????if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId == ????????EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == ????????KeyEvent.KEYCODE_ENTER)) {
????????????ed_editTextView.clearFocus();
? ? ? ? ? Log.d("111","檢測到回車鍵");
}
return true;
}
});
注意:
一定要設(shè)置 ?android:inputType="textMultiLine" 和?android:imeOptions="actionSend" 才能監(jiān)聽到?setOnEditorActionListener 回車事件
如上的用法畔规,在搜狗輸入法下 可以完美的實現(xiàn) 多行輸入,同時監(jiān)聽回車按鍵,但是切換成Android系統(tǒng)自帶的輸入法或這其他輸入法后恨统,按下輸入法回車鍵叁扫,動作只是換行,并不觸發(fā)setOnEditorActionListener 監(jiān)聽回調(diào)畜埋。
2莫绣、嘗試2:
原來這是EditText 的限制,在inputType =?textMultiLine 時,點擊回車鍵的默認操作就是換行,不會有其他的事件觸發(fā)悠鞍。只有將inputType =?text 或者限定為singleline 單行輸入時 才能監(jiān)聽到額外的事件
于是轉(zhuǎn)換思路:將EditText設(shè)置為單行輸入,監(jiān)聽輸入法回車事件对室,同時想辦法 讓輸入內(nèi)容大于EditText寬度時自動換行。
(1)設(shè)置EditView為單行輸入
? ? <android:id="@+id/ed_editTextView"
? ? android:layout_width="match_parent"
? ? android:layout_height="wrap_content"
? ? android:layout_alignParentBottom="true"
? ? android:imeOptions="actionSend"
? ? android:inputType="text"
? ? />
(2)初始化EditView時 設(shè)置起 自動換行
ed_editTextView = (EditText) findViewById(R.id.ed_editTextView); ed_editTextView.setMaxLines(Integer.MAX_VALUE); ed_editTextView.setHorizontallyScrolling(false);
(3)設(shè)置 setOnEditorActionListener,監(jiān)聽 回車事件
ed_editTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() { ????@Override public
? ? boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
????if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId == ????????EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == ????????KeyEvent.KEYCODE_ENTER)) {
????????????ed_editTextView.clearFocus();
? ? ? ? ? Log.d("111","檢測到回車鍵");
}
return true;
}
});
參考文章:http://www.reibang.com/p/701fb57269d0