今天寫了一個自定義Dialog,界面邏輯肯定是有觸碰外面需要消失掉的,然后就試試用setCanceledOnTouchOutside(ture),根據字面意思是對的哈,但是無效,網上有人說要放show() 后面,然后我試了無效-_-
這里強調,要看源碼!!!
其實我也沒看,我大概猜出是怎么回事了
首先,我是自定義mDialog 繼承 Dialog,通過setContentView()加載自定義布局,
其次,在我的自定義布局里面最外層是固定大小的,如下代碼
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="296dp" android:layout_height="290dp" android:background="#00000000" android:layout_gravity="center" >
邏輯代碼很簡單如下:
final UpdateDialog dialog = new UpdateDialog(this); // dialog.setCanceledOnTouchOutside(true); dialog.show();
這樣點擊外面沒有消失的原因是(重點來了)這個布局雖然是固定296和290但是整個 window 還是通過Activity 獲取,是全屏的!!!所以就沒有 outside 可以讓你點擊了!!
所以解決辦法有兩種,一種是改布局,給這個296 &290 線性布局再嵌套個最外層match_parent 的布局,然后給點擊事件回調給Activity處理
第二種是:
final WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); params.width = 600; params.height = 800; dialog.getWindow().setAttributes(params); dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
這樣就該了 window 大小了,可以點擊到outside了
over,謝謝