デフォルトでは、Dialog
が適用され、FLAG_LAYOUT_IN_SCREEN
およびFLAG_LAYOUT_INSET_DECOR
フラグが適用されます。 PhoneWindow
からの抜粋:
mIsFloating = a.getBoolean(R.styleable.Window_windowIsFloating, false);
int flagsToUpdate = (FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR)
& (~getForcedWindowFlags());
if (mIsFloating) {
setLayout(WRAP_CONTENT, WRAP_CONTENT);
setFlags(0, flagsToUpdate);
} else {
setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);
}
FLAG_LAYOUT_INSET_DECOR
あなたはを適用する必要はありませんこと、フラグです。 docsから:
ウィンドウフラグ:のみFLAG_LAYOUT_IN_SCREENと組み合わせて使用するための特別なオプション。画面にレイアウトをリクエストすると、ステータスバーなどの画面の上または下にウィンドウが表示されることがあります。また、このフラグを含めることで、ウィンドウマネージャは、コンテンツがスクリーン装飾で覆われていないことを保証するために必要な挿入矩形を報告します。このフラグは通常ウィンドウによって設定され、setFlags(int、int)に記載されています。
デフォルトでは、windowIsFloating
が有効です。だから、あなたはあなたのカスタムテーマ宣言した場合:で続い
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="MyTheme" parent="@style/ThemeOverlay.AppCompat.Dialog.Alert">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
をごDialogFragment
:
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), R.style.MyTheme);
dialog.setContentView(R.layout.your_layout);
return dialog;
}
レイアウト内容は以下の通りです:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_gravity="center_horizontal"
android:background="@color/colorAccent"
android:layout_width="250dp"
android:layout_height="700dp"/>
</FrameLayout>
その後、あなたは、この出力が得られます:
あなたはピンクのレイアウトは、ステータスバーの下とナビゲーションバーの上にレイアウトしたい場合は、ちょうどあなたのルートViewGroup
へandroid:fitsSystemWindows="true"
を適用します。
:
<FrameLayout
...
android:fitsSystemWindows="true">
<View .../>
</FrameLayout>
はこれが出力されます
私のthis答えでそのフラグの意味を見ることができます。
これをonResume()に追加しても問題は解決しません。今、私は高さと幅をラップするビューを持っています。 – Bugdr0id
'getDialog()。getWindow()。setFlags(...)'を実行していますか? – azizbekian
はい、設定:getDialog()。getWindow()。setFlags(FLAG_LAYOUT_IN_SCREEN、FLAG_LAYOUT_IN_SCREEN); – Bugdr0id