android實現底部彈出框與軟鍵盤衝突(全面屏虛擬鍵適配)
普通的底部彈出框大家都可以很熟練的使用了,無非是一個diaolog的事情,但是當dialog中含有輸入框之後,軟鍵盤與dialog的衝突可以說是十分坑了。。。更別說加上底部虛擬鍵了,這麼一個小功能磨得我簡直吐血。。。下面就是我的血淚史。
第一階段:
首先是底部dialog與軟鍵盤的衝突:
View myView = LayoutInflater.from(MainActivity.this).inflate(R.layout.pop,null);
myView.setPadding(0, 0, 0, 0);
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setView(myView).create();
//設定點選Dialog外部任意區域關閉Dialog
dialog.setCanceledOnTouchOutside(true);
dialog.show();
Window window = dialog.getWindow();
win.getDecorView().setPadding(0, 0, 0, ScreenUtils.getNavigationBarHeight(this));
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;//設定對話方塊置底部顯示
win.setAttributes(lp);
這時候dialog中的佈局檔案即R.layout.pop中含有edittext,每次我輸入後想關閉軟鍵盤,就順手點選diaolog外部區域,這下好了。。。不僅軟鍵盤關閉了,dialog也一起dimiss了。。。然後想著那就不讓點選Dialog外部任意區域關閉Dialog生效唄,就把 dialog.setCanceledOnTouchOutside(true);這行程式碼註釋掉,再執行,ok,我點即外部區域果然不會讓dialog消失,但問題是軟鍵盤也堅挺如初,毫不動搖,我手機自帶的輸入法當輸入中文時候沒有點選收起的小箭頭。。。這下怎麼搞。。。我想要點選外部diaolog不消失,只讓軟鍵盤消失啊!!!然後瘋狂百度,得到解決方法如下:
不使用dialog而是使用dialogActivity,嘿嘿,這樣軟鍵盤總不會和dialog糾纏不清,同上同下了吧。
setContentView(R.layout.activity_main);
//設定視窗對齊螢幕寬度
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;//設定對話方塊置頂顯示
win.setAttributes(lp);
//設定點選外部空白處可以關閉Activity,但我們不需要
//this.setFinishOnTouchOutside(true);
當前activity要繼承自AppCompatActivity,然後重寫
@Overridepublic boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN){ if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){ InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.onTouchEvent(event);}
這樣,點選外部,就會讓軟鍵盤收起,且dialog不消失了(畢竟是activity了)
當然,要在表單中註冊這個activity
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2801990/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android全面屏虛擬導航欄適配Android
- Android監聽軟鍵盤收起與彈出Android
- android全面屏適配Android
- Android軟鍵盤彈出,覆蓋h5頁面輸入框問題AndroidH5
- 點選底部input輸入框,彈出的軟鍵盤擋住input(蘋果手機使用第三蘋果
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- Android O, P 劉海屏及全面屏適配Android
- windows10玩遊戲鍵盤衝突怎麼辦 win10遊戲與鍵盤衝突解決方法Windows遊戲Win10
- 12.2 實現鍵盤模擬按鍵
- Android開發之監聽軟鍵盤狀態(彈出收回)Android
- ios11 劉海屏 安全區域 適配 彈框區域適配iOS
- Android APP全面屏適配技術要點AndroidAPP
- Android錄製視訊的全面屏適配Android
- Android中的EditText預設時不彈出軟鍵盤的方法Android
- 輸入框跟隨鍵盤彈出/隱藏移動
- android手機的微信H5彈出的軟鍵盤擋住了文字框,如何解決?AndroidH5
- Android軟鍵盤模式Android模式
- windows10怎麼調出虛擬鍵盤 win10快速開啟虛擬鍵盤方法介紹WindowsWin10
- ios 最新系統bug與解決——微信公眾號中彈出鍵盤再收起時,原虛擬鍵盤位點選事件無效iOS事件
- vue3中使用simple-keyboard實現虛擬鍵盤(帶中文切換數字鍵盤)Vue
- 短視訊平臺開發,點選輸入框時自動彈出軟鍵盤
- Android 劉海屏適配Android
- Android全面屏啟動頁適配的一些坑Android
- win10系統開機總是自動彈出虛擬鍵盤如何解決Win10
- Android 軟鍵盤踩坑記Android
- win10虛擬鍵盤快捷鍵怎麼開啟Win10
- win10螢幕鍵盤怎麼開啟 調出虛擬鍵盤的四種方法Win10
- win10虛擬鍵盤怎樣開啟 win10開啟虛擬鍵盤的步驟Win10
- [20200107]vim 按鍵與金山詞霸衝突.txt
- Flutter_Webview 鍵盤彈出問題FlutterWebView
- 仿IOS底部彈框iOS
- win10平板虛擬鍵盤怎麼設定_win10平板虛擬鍵盤的設定方法Win10
- Android Home鍵、鎖屏鍵監聽Android
- 鍵盤壞了怎麼用軟鍵盤 電腦怎麼調出桌面鍵盤
- win10系統如何關閉虛擬鍵盤 win10系統關閉虛擬鍵盤的方法Win10
- 虛擬光碟機程式衝突怎麼回事 虛擬光碟機程式衝突的解決步驟
- Android劉海屏、水滴屏全面屏適配方案Android
- H5數字鍵盤元件適配React/Angular/VueH5元件ReactAngularVue