點選EditText的時候出現被鍵盤遮擋 在不使用scrollView的情況
public class KeyboardPatch { private Activity activity; private View decorView; private View contentView; private EditText editText; /** * 建構函式 * * @param contentView 介面根佈局, */ public KeyboardPatch(Activity activity, View contentView) { this.activity = activity; this.decorView = activity.getWindow().getDecorView(); this.contentView = contentView; } /** * 監聽layout變化 */ public void enable() { activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); if (Build.VERSION.SDK_INT >= 19) { decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); } } /** * 取消監聽 */ public void disable() { activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); if (Build.VERSION.SDK_INT >= 19) { decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener); } } private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); decorView.getWindowVisibleDisplayFrame(r); int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels; int diff = height - r.bottom; if (diff > 100) { Log.d("Tag", "抬起鍵盤" + diff + "------screen=" + height); change(diff, height); } else { Log.d("Tag", "關閉鍵盤" + diff + "------screen=" + height); change(0, height); } } };
public void setEditTextView(EditText editText) {
this.editText = editText; } private void change(int diff, int screenHeight) { if (diff > 0) { int[] location = new int[2]; editText.getLocationInWindow(location); int visiHeight = screenHeight - diff;//螢幕的高度——鍵盤的高度 ==可視高度 int local = location[1];//editText的高度 top--y int editBottomHeight = local + editText.getHeight();//view的底部的高度 if (editBottomHeight > visiHeight) {//如果底部的高度大於 可見的高度 說明遮擋 往上移動 contentView.setPadding(0, visiHeight - editBottomHeight, 0, 0); } } else { contentView.setPadding(0, 0, 0, 0); } } }
//使用
var keyboard: KeyboardPatch? = null
edit_.setOnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
keyboard?.enable()
keyboard?.setEditTextView(edit_)
} else {
keyboard?.disable()
}
}
keyboard= KeyboardPatch(this, "根佈局")
相關文章
- UITableView 鍵盤遮擋UIView
- scrollIntoView與鍵盤遮擋View
- 如何解決選單被flash遮擋的現象
- react在安卓下輸入框被手機鍵盤遮擋問題React安卓
- EditText的點選事件遮蔽鍵盤響應事件
- Android中的EditText預設時不彈出軟鍵盤的方法Android
- iOS解決鍵盤彈出遮擋輸入框問題iOS
- 修復蘋果iOS 原生鍵盤遮擋input框蘋果iOS
- 移動端鍵盤遮擋頁面原理分析
- 利用flex佈局解決ios輸入框被鍵盤遮擋問題FlexiOS
- flutter - 使用 SingleChildScrollView() 解決鍵盤遮擋輸入框的問題FlutterView
- iOS軟鍵盤遮擋UITableView內文字框問題iOSUIView
- ZYKeyboardUtil 全自動處理鍵盤遮擋事件事件
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- 輸入框軟鍵盤遮擋問題解決方案
- 首次進入帶有EditText的activity時不啟動軟鍵盤
- 點選底部input輸入框,彈出的軟鍵盤擋住input(蘋果手機使用第三蘋果
- React Native踩坑指南:ios鍵盤遮擋輸入框React NativeiOS
- android 記一次解決鍵盤遮擋問題Android
- android記一次解決鍵盤遮擋問題Android
- iOS -UITextField/UITextView之鍵盤遮擋輸入框解決方法iOSUITextView
- 『零行程式碼』解決鍵盤遮擋問題(iOS)行程iOS
- sql統計時間出現斷點的相關情況SQL斷點
- 記一次頁面有EditText時,鍵盤彈出的問題
- 直播網站原始碼,點選EditText以外的區域,鍵盤隱藏消失網站原始碼
- 解決虛擬按鍵遮擋popupWindow
- UIView顯示時遮擋導航欄的方法UIView
- php倒數計時出現-0的情況PHP
- MySQL遠端訪問時,非常慢,甚至出現連不上的情況MySql
- 點選空白出隱藏鍵盤,或者點選按鈕隱藏軟鍵盤
- 我在下載模組的時候下不下來出現這種情況是什麼意思?
- 在不影響程式使用的情況下新增shellcode
- mysql left join的時候又表是多條記錄的話,會出現冗餘的情況MySql
- powerpoint: 遮擋文字
- TreeView 在失去焦點的時候 選中的TreeNode仍為高亮View
- Win10系統開啟觸控鍵盤會遮擋工作列如何解決Win10
- unity 的視錐剔除和遮擋剔除Unity
- 爬蟲代理為什麼會出現超時的情況?爬蟲