點選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, "根佈局")
相關文章
- scrollIntoView與鍵盤遮擋View
- Android中的EditText預設時不彈出軟鍵盤的方法Android
- react在安卓下輸入框被手機鍵盤遮擋問題React安卓
- flutter - 使用 SingleChildScrollView() 解決鍵盤遮擋輸入框的問題FlutterView
- 利用flex佈局解決ios輸入框被鍵盤遮擋問題FlexiOS
- 修復蘋果iOS 原生鍵盤遮擋input框蘋果iOS
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- React Native踩坑指南:ios鍵盤遮擋輸入框React NativeiOS
- android 記一次解決鍵盤遮擋問題Android
- android記一次解決鍵盤遮擋問題Android
- 點選底部input輸入框,彈出的軟鍵盤擋住input(蘋果手機使用第三蘋果
- 直播網站原始碼,點選EditText以外的區域,鍵盤隱藏消失網站原始碼
- 剪映設定封面時候如何防止文字遮擋人物 All In One
- 解決虛擬按鍵遮擋popupWindow
- 成都現在的情況
- 在不影響程式使用的情況下新增shellcode
- powerpoint: 遮擋文字
- mysql left join的時候又表是多條記錄的話,會出現冗餘的情況MySql
- 我在下載模組的時候下不下來出現這種情況是什麼意思?
- 在duplicate時,出現監聽BLOCKED的情況,導致監聽自動關閉BloC
- 爬蟲代理為什麼會出現超時的情況?爬蟲
- php訪問目標網站時出現亂碼的情況PHP網站
- Cypress 踩坑記 - DOM 遮擋
- 在 Vue 中如何避免在動態繫結 類 出現空 類 的情況?Vue
- a-modal 使用 vxe-table 可編輯表格、下拉框被遮擋解決方法
- TabTip32.exe是Windows作業系統中的一個程序,通常與觸控鍵盤(軟鍵盤)相關聯。它是Windows的一個元件,用於在需要時顯示軟鍵盤,以便使用者在沒有物理鍵盤的情況下輸入文字或命令。Windows作業系統元件
- 直播平臺原始碼,關於彈出框中輸入框被遮擋問題解決原始碼
- uniapp再safari瀏覽器中,使用uni-datetime-picker底部確定按鈕被遮擋APP瀏覽器
- mysql索引不會命中的情況MySql索引
- iframe中的二級選單被遮蓋怎麼辦?
- RTSP播放器EasyPlayer.js播放器在使用顯示卡解碼(H264/H265)的時候,會出現顯示卡解碼器不穩定的情況造成畫面卡頓播放器JS
- Java挑戰:在不使用點、反斜槓或分號的情況下輸出Hello World - Wouter CoekaertsJava
- 【快應用】選單遮擋內容?教你一招快速搞定!
- 不應該在沒有 sudo 的情況下執行 Docker 的原因Docker
- vue在不確定介面何時請求完的情況下,如何改變陣列Vue陣列
- [20220216]為什麼出現這樣的情況.txt
- 盤一盤常見的6種索引失效情況索引
- 在不使用 mv 命令的情況下移動檔案