Я прибегая к помощи в течение нескольких часов и пытался бесчисленные вещи, но я просто не могу получить эту работу ...Как сделать полноэкранный режим 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
Должен ли он быть диалоговым? Будет ли работа работать? – Karakuri
вы пробовали с переопределенным диалоговымфрагментом. У меня есть код. я не знаю, что удовлетворит ваши потребности или нет. любым способом я отправлю код. попробуй. – Noorul
Почему вы пытаетесь заставить диалог не быть диалогом? Кажется, вы используете неправильную абстракцию. – ianhanniballake