私は時間のためにグーグルと数え切れないほどのものを試してみましたが、私はちょうどこれを動作させることはできませんしてきた...ステータスバー/ナビゲーションバーとマンティンステータスバーの色を重ならないで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
あなたは上書きされたdialogfragmentで試してみましたか?私はコードを持っています。私はあなたのニーズを満たすかどうかはわかりません。どのような方法で私はコードを投稿します。それを試してみてください。 – Noorul
ダイアログをダイアログではないように強制しようとしているのはなぜですか?あなたは間違った抽象を使用しているようです。 – ianhanniballake