安卓Dialog setCanceledOnTouchOutside(ture) 無效問題


今天寫了一個自定義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,謝謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM