最近在項目中,須要獲取到軟鍵盤的高度,再將底部的佈局上移鍵盤的高度,話很少說,直接上代碼:android
獲取軟鍵盤高度bash
//一個靜態變量存儲高度 public static int keyboardHeight = 0; boolean isVisiableForLast = false; ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = null; public void addOnSoftKeyBoardVisibleListener() { if (keyboardHeight > 0) { return; } final View decorView = getWindow().getDecorView(); onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); //計算出可見屏幕的高度 int displayHight = rect.bottom - rect.top; //得到屏幕總體的高度 int hight = decorView.getHeight(); boolean visible = (double) displayHight / hight < 0.8; int statusBarHeight = 0; try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); statusBarHeight = getApplicationContext().getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } if (visible && visible != isVisiableForLast) { //得到鍵盤高度 keyboardHeight = hight - displayHight - statusBarHeight; Log.i("keyboardHeight==1213==", "" + keyboardHeight); } isVisiableForLast = visible; } }; decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); } 複製代碼
鍵盤的打開與關閉操做:markdown
public class KeybordS { /** * 打開軟鍵盤 */ public static void openKeybord(EditText mEditText, Context mContext) { mEditText.setFocusable(true); mEditText.setFocusableInTouchMode(true); mEditText.requestFocus(); InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); } /** * 關閉軟鍵盤 */ public static void closeKeybord(EditText mEditText, Context mContext) { InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } /** * 關閉軟鍵盤 */ public static void hideInput(Activity activity) { if (activity.getCurrentFocus() != null) { InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); } } /** * 判斷當前軟鍵盤是否打開 */ public static boolean isSoftInputShow(Activity activity) { // 虛擬鍵盤隱藏 判斷view是否爲空 View view = activity.getWindow().peekDecorView(); if (view != null) { // 隱藏虛擬鍵盤 InputMethodManager inputmanger = (InputMethodManager) activity .getSystemService(Activity.INPUT_METHOD_SERVICE); // inputmanger.hideSoftInputFromWindow(view.getWindowToken(),0); return inputmanger.isActive() && activity.getWindow().getCurrentFocus() != null; } return false; } } 複製代碼
監聽鍵盤處於打開仍是關閉狀態:ide
private void setListenerToRootView() {
final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
boolean mKeyboardUp = isKeyboardShown(rootView);
if (mKeyboardUp) {
//鍵盤彈出
//Toast.makeText(getApplicationContext(), "鍵盤彈出", Toast.LENGTH_SHORT).show();
} else {
//鍵盤收起
//Toast.makeText(getApplicationContext(), "鍵盤收起", Toast.LENGTH_SHORT).show();
}
}
});
}
private boolean isKeyboardShown(View rootView) {
final int softKeyboardHeight = 100;
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
DisplayMetrics dm = rootView.getResources().getDisplayMetrics();
int heightDiff = rootView.getBottom() - r.bottom;
return heightDiff > softKeyboardHeight * dm.density;
}
複製代碼
如下是我的公衆號(longxuanzhigu),以後發佈的文章會同步到該公衆號,方便交流學習Android知識及分享我的愛好文章: 佈局