Ich habe ein DialogFragment, das ich im Vollbildmodus anzeigen möchte. Ich möchte jedoch immer noch eine Statusleiste und die Hardwaretasten unten sehen. Ich möchte auch eine Hintergrundfarbe der Statusleiste (für Lollipop) festlegen.Fullscreen DialogFragment mit transluzenten StatusBar
Mein Problem ist, dass wenn ich die folgenden Flags in der DialogFragment gesetzt:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
Sowohl die StatusBar und Hardware-Tastatur wird durchlässig, und die DialogFragment dahinter erstreckt.
Hier ist der Code, der stark reduziert lesbar geworden ist:
public class CardDetailsDialog extends DialogFragment {
Setup parameters...
public static CardDetailsDialog newInstance(final long cardId, final long projectId){
CardDetailsDialog frag = new CardDetailsDialog();
frag.setStyle(DialogFragment.STYLE_NORMAL, R.style.CardDetailsDialogStyle);
return frag;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(getDialog() != null) {
getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogSlideAnimation;
getDialog().getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
getDialog().getWindow().setStatusBarColor(Color.RED);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.card_details, container, false);
Handle everything that happens inside the view...
return view;
}
}
Hier ist das genannte Thema:
<style name="CardDetailsDialogStyle" parent="@style/Theme.AppCompat.Light.Dialog" >
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
Und der Stil des Fragments:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/pp.whiteBackgroundColor" >
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_details_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_alignParentTop="true"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/PopupMenutheme">
</android.support.v7.widget.Toolbar>
<ScrollView
android:id="@+id/details_scrollview"
android:layout_height="wrap_content"
android:layout_width="match_parent">
All subview elements here...
</ScrollView>
</RelativeLayout>
Dies ist das Ergebnis:
Wie Sie sehen können, erstreckt sich die ToolBar über die StatusBar und Hardwaretasten. Ich weiß nicht, ob ich mich dem richtig annähere. Fehle ich etwas?
EDIT
Dies ist, was die gleiche Ansicht Blick mag, wenn ich
getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
Vielleicht kann sein, dass die Höhe des Dialogs ist kleiner als die Werkzeugleiste. – Dahnark
Ich folge nicht, könnten Sie bitte erarbeiten? – pnit
In Appcompat 21 für Lollipop können Sie die Höhe in der XML-Datei festlegen. Wenn Sie eine Symbolleiste verwenden, hat sie möglicherweise mehr Höhe als das Dialogfeld. – Dahnark