我一直在谷歌上搜索了幾個小時,並試圖無數的東西,但我不能得到這個工作...如何在不重疊狀態欄/導航欄並保持狀態欄顏色的情況下使全屏顯示DialogFragment?
這是MyFragment.java
:
public class MyFragment extends DialogFragment {
public MyFragment() {
// Required empty public constructor
}
public static MyFragment newInstance() {
MyFragment newFragment = new LoginDialogFragment();
newFragment.setCancelable(false);
return newFragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), R.style.MyAppTheme_Dialog);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
ButterKnife.bind(this, view);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Window window = getDialog().getWindow();
if (window != null) {
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
window.setWindowAnimations(R.style.MyAppTheme_Dialog);
}
}
}
這是styles.xml
:
<style name="MyAppTheme" parent="PreferenceFixTheme.Light.NoActionBar">
<item name="android:windowBackground">@color/background</item>
<item name="android:colorBackground">@color/background</item>
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="preferenceCategory_marginBottom">0dp</item>
</style>
<style name="MyAppTheme.Dialog">
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
這幾乎可以像我期望的那樣工作......唯一的問題是調用window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
填充整個屏幕(減去狀態/導航欄)會將狀態欄顏色更改爲黑色。當我關閉對話框時,它會變回colorPrimaryDark
。
如果我刪除window.setLayout(...)
行,狀態欄將保留colorPrimaryDark
,但對話框大小將爲默認值(屏幕中間的一個小方塊)。
在同一個地方我打電話window.setLayout(...)
,我試圖把下面的代碼:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(ContextCompat.getColor(getActivity, R.color.primary_dark));
}
這將設置狀態欄顏色colorPrimaryDark
但兩者重疊的狀態和導航欄。
我只是不能全屏,沒有重疊的狀態和導航欄,並保持colorPrimaryDark
在狀態欄上。
我發現了幾個同樣問題的問題,但我無法得到建議。無論是有一個接受的答案:
- Fullscreen DialogFragment with translucent StatusBar
- Android full screen dialog fragment like calendar app
是否必須是DialogFragment?活動是否有效? – Karakuri
你是否嘗試過使用overrided dialogfragment。我有代碼。我不知道哪個能滿足你的需求。任何我會發布代碼的方式。嘗試一下。 – Noorul
你爲什麼試圖強制一個對話框不是對話框?你似乎在使用錯誤的抽象。 – ianhanniballake