DialogFragment全屏
默認來說DialogFragment是不全屏的,需要以下代碼進行設置
/**
* Activity創建後纔會有window
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//設置全屏
getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
外側背景透明問題
DialogFragment對話框有兩層,一層是外部的背景,默認是半透明的,由以下代碼進行更改
@Override
public void onStart() {
super.onStart();
//去除背景
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
內層的背景默認是白色的,如果自定義的佈局背景是半透明的圖片,需要把背景改下,否則半透明圖片會不生效
/**
* Activity創建後纔會有window
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//需要這一行來解決對話框背景有白色的問題(顏色隨主題變動)
}
DialogFragment實例問題
不管對話框顯示多少次,都用同一個dialog的實例,但是傳參數的時候,參數都可以進行改變,例如:
MainActivity.java
private TestDialog dialog;
private void showDialog(){
if(null == dialog){
dialog = new TestDialog();
}
Bundle bundle = new Bundle();
bundle.putInt("test",1);
settingTimeDialog.setArguments(bundle);
settingTimeDialog.show(getSupportFragmentManager(),"");
}
TestDialog.java
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle bundle = getArguments();
if (null != bundle){
int test = bundle.getInt(test,8000);//每次調用show進行顯示的時候都會執行這個方法獲取參數
}
}
對話框全局按鍵監聽
設置對話框內全局按鍵監聽,當對話框顯示時候,所有遙控器按鍵均可以監聽
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
Log.e("YM","按鍵:"+keyCode);
return false;
}
});
}
DialogFragment空白處禁止點擊
點擊空白處禁止關閉
1、
setCanceledOnTouchOutside(false):調用這個方法時,按對話框以外的地方不起作用。按返回鍵還起作用。
setCanceledOnTouchOutside(true):點擊灰色空白處關閉彈框。
2、
setCanceleable(false);調用這個方法時,按對話框以外的地方不起作用。按返回鍵也不起作用
注意:setCanceledOnTouchOutside(true)如果需要起作用,不能設置setCanceleable(false),如果設置爲false,則不起作用。
DialogFragment的show()與setArgums()的關係
當我們調用show()函數的時候對話框才顯示,如果我們需要在show()的時候傳遞參數進去並進行處理時需要在onShow()裏面獲取Argums參數
@Override
public void show(FragmentManager manager, String tag) {
super.show(manager, tag);
Bundle bundle = getArguments();
}
注意:onShow()執行時機要比onCreate()執行的早
參考鏈接
- DialogFragment的使用
https://developer.android.google.cn/reference/kotlin/android/app/DialogFragment?hl=en - Android–>Dialog/DialogFragment寬度高度修改/全屏,自定義樣式
https://www.jianshu.com/p/c094d8038b24 - 給DialogFragment設置樣式:
https://blog.csdn.net/ttkatrina/article/details/54984375 - Android DialogFragment
https://blog.csdn.net/as89751/article/details/97581729 - DialogFragment 的使用和一些坑點
https://blog.csdn.net/little_story/article/details/81437013 - Android DialogFragment 的常用屬性
https://blog.csdn.net/weixin_37716758/article/details/101207339 - 還在用Dialog嗎——DialogFragment帶你體驗完美高效率
https://blog.csdn.net/androidstarjack/article/details/73824885 - 最全面的DialogFragment的使用,實現DialogFragment全屏、背景透明;
https://blog.csdn.net/weixin_30824479/article/details/98609945 - Android 關於DialogFragment的充滿及點擊背景穿透
https://blog.csdn.net/Keepsty/article/details/81359459