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軟鍵盤自動彈出Android
- windows10玩遊戲鍵盤衝突怎麼辦 win10遊戲與鍵盤衝突解決方法Windows遊戲Win10
- 點選底部input輸入框,彈出的軟鍵盤擋住input(蘋果手機使用第三蘋果
- 小技巧|H5禁止手機虛擬鍵盤彈出H5
- Android軟鍵盤彈出,覆蓋h5頁面輸入框問題AndroidH5
- Android 監聽鍵盤彈出收起Android
- ios11 劉海屏 安全區域 適配 彈框區域適配iOS
- Android O, P 劉海屏及全面屏適配Android
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- Android 安卓手機及平板虛擬鍵盤遮住底部導航欄問題Android安卓
- Android開發,在Fragment中,隱藏或關閉軟鍵盤(虛擬鍵盤)的方法AndroidFragment
- 12.2 實現鍵盤模擬按鍵
- Android開發之監聽軟鍵盤狀態(彈出收回)Android
- Linux 虛擬滑鼠,鍵盤Linux
- android 軟鍵盤 輸入法 彈出引起的各種不適終極解決方案Android
- Android鍵盤皮膚衝突 佈局閃動處理方案Android
- windows10怎麼調出虛擬鍵盤 win10快速開啟虛擬鍵盤方法介紹WindowsWin10
- Android APP全面屏適配技術要點AndroidAPP
- Android錄製視訊的全面屏適配Android
- iOS解決鍵盤彈出遮擋輸入框問題iOS
- Android中的EditText預設時不彈出軟鍵盤的方法Android
- ios 最新系統bug與解決——微信公眾號中彈出鍵盤再收起時,原虛擬鍵盤位點選事件無效iOS事件
- Android軟鍵盤模式Android模式
- Android 軟鍵盤蓋住輸入框的問題Android
- C#實現的三種方式實現模擬鍵盤按鍵C#
- 短視訊平臺開發,點選輸入框時自動彈出軟鍵盤
- win10虛擬鍵盤快捷鍵怎麼開啟Win10
- win10系統開機總是自動彈出虛擬鍵盤如何解決Win10
- win10螢幕鍵盤怎麼開啟 調出虛擬鍵盤的四種方法Win10
- vue3中使用simple-keyboard實現虛擬鍵盤(帶中文切換數字鍵盤)Vue
- 使用 React Native 自定義安全鍵盤(iOS 和 Android 雙適配)React NativeiOSAndroid
- Android 劉海屏適配Android
- win10虛擬鍵盤怎樣開啟 win10開啟虛擬鍵盤的步驟Win10
- Flutter_Webview 鍵盤彈出問題FlutterWebView
- 全面理解虛擬DOM,實現虛擬DOM