Android解決Dialog觸碰外面不能自動(dòng)關(guān)閉問(wèn)題,其實(shí)也就是解決dialog.setCanceledOnTouchOutside(true) 不生效問(wèn)題
為什么設(shè)置了dialog.setCanceledOnTouchOutside(true) 會(huì)不生效呢?
問(wèn)題根源在styles文件中定義android:windowIsFloating=false導(dǎo)致:
<!-- 底部彈出日期選擇窗口Dialog樣式. -->
<style name="BottomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:windowIsFloating">false</item>
</style>
android:windowIsFloating 表示Dialog是否浮現(xiàn)在activity之上,
當(dāng)將windowIsFloating設(shè)置為false時(shí)對(duì)話框默認(rèn)將使用全屏.因此沒(méi)有外部區(qū)域可以點(diǎn)擊取消,導(dǎo)致setCanceledOnTouchOutside(true)會(huì)失效
當(dāng)將windowIsFloating設(shè)置為true時(shí),觸碰dialog區(qū)域外可以自動(dòng)關(guān)閉,但是match_parent屬性無(wú)效,不會(huì)自動(dòng)擴(kuò)展寬度以填充屏幕,? 這將導(dǎo)致contentView總是將內(nèi)容包裝成盡可能小的內(nèi)容。
所以:這里?建議將其設(shè)置為false后手動(dòng)將Dialog窗口布局更新為MATCH_PARENT 問(wèn)題即可解決
定義一個(gè)java方法: ?
//解決dialog.setCanceledOnTouchOutside(true) 不生效問(wèn)題
public void setDialogTouchOutsideCloseable(Dialog dialog, int gravity) {
Window window = dialog.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
window.setAttributes(params);
window.setGravity(gravity);
}
使用:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-671565.html
setDialogTouchOutsideCloseable(dialog,Gravity.BOTTOM);
作者原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-671565.html
到了這里,關(guān)于Android解決Dialog觸碰外面不能自動(dòng)關(guān)閉問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!