需求描述:在Dialog背景透明的情況下煎楣,允許Dialog透明區(qū)域下的Window獲取點(diǎn)擊事件。(可能需求有點(diǎn)特殊吧嫉你,需要2個(gè)Dialog來處理)
簡(jiǎn)單吐槽一下九孩,這個(gè)功能以前做過,太久了就忘記了阱扬。最初思路就定在Window的屬性上泣懊,找了很久沒發(fā)現(xiàn)怎么去設(shè)置。
沒想到需要通過WindowManager.LayoutParams麻惶,里面有挺多屬性可用的馍刮。
首先需要設(shè)置Dialog透明屬性:
1、在Styles.xml中添加
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
2窃蹋、繼承Dialog的自定義Dialog中添加
設(shè)置style
public SelectdDialog(@NonNull Context context) {
super(context, R.style.dialog);
this.context = context;
}
設(shè)置Window屬性
Window window = getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; //核心代碼是這個(gè)屬性卡啰。
window.setAttributes(layoutParams);
window.setDimAmount(0f);
setCanceledOnTouchOutside(false);
PS:附上WindowManager.LayoutParams的各種flag含義,就不重復(fù)寫了脐彩。
http://www.reibang.com/p/c91448e1c7d1