Plein écran DialogFragment translucide de la Barre d'état
J'ai un DialogFragment qui je veux afficher en plein écran. Toutefois, j'ai encore envie d'une Barre d'état présents, et le matériel de boutons en bas. Je tiens également à définir une couleur d'arrière-plan de la Barre de statut (par Lollipop).
Mon problème est que si je définis les indicateurs suivants dans le DialogFragment:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
À la fois la Barre de statut et de Matériel clavier devient translucide, et la DialogFragment s'étend derrière ces.
Voici le code, qui a été considérablement réduit pour devenir lisible:
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;
}
}
Ici est la visée thème:
<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>
Et le style du fragment:
<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>
C'est le résultat:
Comme vous pouvez le voir, la Barre d'outils s'étend sur la Barre d'état et les boutons matériels. Je ne sais pas si je me rapproche de ce correctement. Ai-je raté quelque chose?
MODIFIER
C'est ce que le même point de vue look aime quand j'enlève
getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
OriginalL'auteur pnit | 2015-02-02
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser le même Style de votre Application. J'ai testé avec une simple boîte de dialogue sans fragment et fonctionne très bien.
Comme ça:
CardDetailsDialogStyle est le style qui est appliqué à l'activité
OriginalL'auteur tiagotoxa
Vous devez définir fitsystemwindows = true. Autre façon est d'ajouter un Espace avec 0dp et changer sa hauteur à 25dp lorsque la boîte de dialogue va apparaître.
Pour modifier la taille de l'espace, utiliser la mise en page paramètres, consultez ce post: Comment créer un RelativeLayout par programmation avec deux boutons l'un sur l'autre?
Je ne suis pas la suite, pourriez-vous préciser?
Dans appcompat 21 pour la sucette, vous pouvez définir l'altitude dans le xml. Si vous utilisez une barre d'outils, peut-être qu'il a plus d'élévation que la boîte de dialogue.
Merci ça a fonctionné! Voici un peu de documentation: developer.android.com/reference/android/view/...
OriginalL'auteur JavierSegoviaCordoba
Pour toute personne qui est toujours à avoir ce problème, procédez de la manière suivante. Cette juste résout la moitié du problème qui est affiché c'est à dire noir barre d'état.
Ajouter après le thème de res/valeur-v21/style
Et ensuite appliquer un Style sur
DialogFragment
dansonCreate
Modifier
si vous avez des problèmes avec votre boîte de dialogue de thème, puis utiliser ce style par exemple
colorAccent
oucolorControlHighlight
etcOriginalL'auteur Noman Rafique
Dans mon cas
SYSTEM_UI_FLAG_LAYOUT_STABLE
résolu le problème avec un chevauchementOriginalL'auteur adray
OriginalL'auteur Chhaya