Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android點擊空白區域,隱藏輸入法軟鍵盤

Android點擊空白區域,隱藏輸入法軟鍵盤

編輯:關於Android編程

歡迎使用Markdown編輯器寫博客

很多時候,我們在使用應用時,會出現輸入法軟鍵盤彈出的問題,通常情況下,我們默認會使用戶點擊返回鍵或者下一步對軟鍵盤進行隱藏。為了更好的體驗,我們可以實現當用戶使用完畢軟鍵盤時。點擊空白區域即可實現隱藏的功能。效果如圖所示:
這裡寫圖片描述


代碼實現

代碼塊語法遵循標准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即可,則所有界面均可實現點擊空白區域,隱藏軟鍵盤。
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved