Fullscreen DialogFragment mit durchsichtigen StatusBar
Habe ich ein DialogFragment, die ich zeigen möchte, in den Vollbildmodus. Ich habe jedoch noch eine Statusleiste vorhanden, und die hardware-Tasten an der Unterseite. Ich will auch eine Hintergrundfarbe der StatusBar (Lollipop).
Mein problem ist, dass wenn ich die folgenden flags in der DialogFragment:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
Sowohl die StatusBar und die Hardware-Tastatur wird durchscheinend, und das DialogFragment erstreckt sich hinter diesen.
Hier ist der code, welcher stark reduziert worden, um lesbar:
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 der von Ihnen 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 den 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, die Symbolleiste erstreckt sich über die StatusBar und hardware-Tasten. Ich weiß nicht, ob ich nähere mich das richtig. Bin ich etwas fehlt?
BEARBEITEN
Dies ist, was der gleiche Blick Aussehen mag, wenn ich entfernen
getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
InformationsquelleAutor pnit | 2015-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen mit dem gleichen Stil von der App aus. Getestet habe ich mit einfachen dialog, ohne fragment und funktioniert einwandfrei.
So:
CardDetailsDialogStyle ist ein Stil, der angewendet wird, um zu Aktivität
InformationsquelleAutor tiagotoxa
Müssen Sie fitsystemwindows = true. Andere Möglichkeit ist das hinzufügen von einem Raum mit 0dp, und ändern Sie die Höhe 25dp, wenn der dialog zeigt.
Ändern Sie die Raum-Größe, layout params, prüfen Sie diesen post: So erstellen Sie ein RelativeLayout programmgesteuert mit zwei Tasten auf der Oberseite des anderen?
Ich bin nicht nach, könnten Sie das bitte näher erläutern?
In appcompat 21 für Lutscher, die Sie festlegen können, Erhebung in der xml. Wenn Sie eine Symbolleiste, vielleicht hat es mehr Höhe als der dialog.
Vielen Dank, dass hat funktioniert! Hier ist eine Dokumentation: developer.android.com/reference/android/view/...
InformationsquelleAutor JavierSegoviaCordoba
Für alle, die ' s immer noch das problem, das tun die folgende. Dies nur löst die Hälfte des Problems, die gebucht wird, d.h. schwarze status bar.
Fügen Sie folgenden Thema zu res/value-v21/Stil
Und dann Stil anwenden auf
DialogFragment
imonCreate
Bearbeiten
wenn Sie haben problem mit Ihrer dialog-Thema, dann verwenden Sie diesen Stil z.B.
colorAccent
odercolorControlHighlight
etcInformationsquelleAutor Noman Rafique
In meinem Fall
SYSTEM_UI_FLAG_LAYOUT_STABLE
problem mit überlappendenInformationsquelleAutor adray
InformationsquelleAutor Chhaya