標籤:
很多朋友出現過這樣的一個問題,當底部彈出評論框時,有幾個問題,一個是軟體盤彈出時怎麼讓焦點在輸入框,關於這個問題,本人也是遇到過,解決了很久,有的是在布局設定或者代碼裡setFocusable(true),並沒有用,又在代碼或者代碼裡設定requestFocus(),依然沒有用,其實這個解決辦法是沒有錯的,但是為什麼會沒用呢,因為並沒有及時是在軟體盤彈出時設定,所以先提出隱藏和顯示軟體盤的方法
private void onFocusChange(boolean hasFocus) {final boolean isFocus = hasFocus;(new Handler()).postDelayed(new Runnable() {public void run() {InputMethodManager imm = (InputMethodManager) commentEdit.getContext().getSystemService(INPUT_METHOD_SERVICE);if (isFocus) {// 顯示IMEimm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);commentEdit.setFocusable(true);commentEdit.requestFocus();} else {// 隱藏IMEimm.hideSoftInputFromWindow(commentEdit.getWindowToken(), 0);}}}, 100);}
其中,commentEdit是你布局的editext的id的變數,這個方法寫的很清楚,顯示IME和隱藏IME,當你在其他方法調用時,只需設定onFoucsChange(true)或者onFoucsChange(false),那麼問題來了,這裡分為2種情況,
1.方法中我已經包含了輸入框擷取焦點的方法
commentEdit.setFocusable(true);commentEdit.requestFocus();
那麼當輸入完以後怎麼隱藏呢,對,就是剛才說的onFoucsChange(false)即可,你可以在輸入框之外的地方設定點擊事件,然後調用這個方法,然後設定之前的布局設為顯示即可setvisitible(true),就可以了,給個圖讓大家看看例子吧
大家看圖可以得知,焦點已經自己擷取在輸入框了,並不是我點擊而或取得,就是這種效果,取消輸入框的方式,我自己設定了3種,一種是彈出的軟體盤,我設定了取消,一種是在評論列表裡設定,還有一種就是我標紅色的地方,這個我手機內建的返回按鈕,重點來了,很多人在點擊系統內建的返回鍵時,發現無法取消,然後有的人在網上找了設定系統的返回鍵,在裡面進行隱藏操作,可是隱藏以後,這個返回鍵就不具備返回的功能,然後又的人就加上finish();結果發現隱藏的同時也返回了,這並不是我們呢想要的效果,我們想要的是點擊一下,輸入盤以藏,然後接下來的點擊才返回,下面我直接貼出代碼,很簡單,大家也很好理解
,首先在全部變數用handler發送
private static boolean isExit = false;
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); isExit = false; } };然後重寫onKeyDown方法
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { bottomLinear.setVisibility(View.VISIBLE);commentLinear.setVisibility(View.GONE);onFocusChange(false); exit(); } return true; }
private void exit() { if (!isExit) { isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show(); // 利用handler延遲發送更改狀態資訊 mHandler.sendEmptyMessageDelayed(0, 2000); } else { finish(); } }
這個方法裡,我設定的
bottomLinear.setVisibility(View.VISIBLE);
commentLinear.setVisibility(View.GONE);
是我自己的布局,就是大家圖上看到的不彈出輸入框的布局,這個大家根據實際情況鎖定.
好了,這些東西都有了,大家就可以正常的操作你的軟鍵盤了,以後遇到這些問題也可以不用怕了
給個好評吧
Android 設定系統的返回鍵 和軟鍵盤擷取焦點問題