Android點擊空白地區,隱藏IME軟鍵盤

來源:互聯網
上載者:User

標籤:空白地區   隱藏   軟鍵盤   

歡迎使用Markdown編輯器寫部落格

很多時候,我們在使用應用時,會出現IME軟鍵盤彈出的問題,通常情況下,我們預設會使使用者點擊返回鍵或者下一步對軟鍵盤進行隱藏。為了更好的體驗,我們可以實現當使用者使用完畢軟鍵盤時。點擊空白地區即可實現隱藏的功能。效果:

代碼實現

代碼塊文法遵循標準markdown代碼,例如:

package example.com.jinlin.myapplication;import android.content.Context;import android.os.Bundle;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.view.MotionEvent;import android.view.View;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;/** * Created by J!nl!n on 15/5/21. */public abstract class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        iniView();    }    public abstract void iniView();    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {            View v = getCurrentFocus();            if (isShouldHideKeyboard(v, ev)) {                hideKeyboard(v.getWindowToken());            }        }        return super.dispatchTouchEvent(ev);    }    /**     * 根據EditText所在座標和使用者點擊的座標相對比,來判斷是否隱藏鍵盤,因為當使用者點擊EditText時則不能隱藏     *     * @param v     * @param event     * @return     */    private boolean isShouldHideKeyboard(View v, MotionEvent event) {        if (v != null && (v instanceof EditText)) {            int[] l = {0, 0};            v.getLocationInWindow(l);            int left = l[0],                top = l[1],                bottom = top + v.getHeight(),                right = left + v.getWidth();            if (event.getX() > left && event.getX() < right                    && event.getY() > top && event.getY() < bottom) {                // 點擊EditText的事件,忽略它。                return false;            } else {                return true;            }        }        // 如果焦點不是EditText則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditText上,和使用者用軌跡球選擇其他的焦點        return false;    }    /**     * 擷取InputMethodManager,隱藏軟鍵盤     * @param token     */    private void hideKeyboard(IBinder token) {        if (token != null) {            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);        }    }}

當然我們還有更加簡單的方法來實現該功能,只需要重寫onTouchEvent方法即可。代碼如下:

// 點擊空白地區 自動隱藏軟鍵盤    public boolean onTouchEvent(MotionEvent event) {        if(null != this.getCurrentFocus()){            /**             * 點擊空白位置 隱藏軟鍵盤             */            InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);            return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);        }        return super .onTouchEvent(event);    }

使用一個BaseActivity進行一些處理公用操作,其他Activity均繼承自該基類Activity即可,則所有介面均可實現點擊空白地區,隱藏軟鍵盤。
範例程式碼下載

Android點擊空白地區,隱藏IME軟鍵盤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.