2017-09-20 6 views
0

Je crée une boîte de dialogue personnalisée en étendant Dialog et en utilisant setContentView(). Le problème est que lorsque j'essaie d'afficher le dialogue, il affiche uniquement l'ombre d'arrière-plan au lieu de ma disposition personnalisée. J'ai réussi à montrer la disposition personnalisée en l'enveloppant dans un RelativeLayout, mais je me demande s'il y a une meilleure solution ou quelque chose que je fais mal. Utilisation de constraintLayout version 1.0.2. Merci!Utilisation de ConstraintLayout avec une boîte de dialogue Android personnalisée

Voici mon Custom Dialog:

class EventsFilterDialog(context: Context): Dialog(context) { 
    init { 
     setContentView(R.layout.dialog_events_filter) 
     setCancelable(true) 
    } 
} 

Voici une version simplifiée de mon R.layout.dialog_events_filter qui a exactement le même résultat:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:background="@color/white" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/headerTv" 
     android:text="@string/events_filters" 
     android:textColor="@color/white" 
     android:textSize="18sp" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:background="@color/colorPrimaryLight" 
     android:padding="16dp" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" /> 

    <View 
     android:id="@+id/middleView" 
     android:layout_width="0dp" 
     android:layout_height="256dp" 
     app:layout_constraintTop_toBottomOf="@+id/headerTv" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" /> 

    <TextView 
     android:id="@+id/closeTv" 
     android:text="@string/close" 
     android:textColor="@color/white" 
     android:textAllCaps="true" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:background="@color/colorPrimaryLight" 
     android:layout_width="0dp" 
     android:layout_height="48dp" 
     app:layout_constraintTop_toBottomOf="@+id/middleView" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toLeftOf="@+id/applyTv" /> 

    <TextView 
     android:id="@+id/applyTv" 
     android:text="@string/apply_filter" 
     android:textColor="@color/white" 
     android:textAllCaps="true" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:background="@color/colorAccent" 
     android:layout_width="0dp" 
     android:layout_height="48dp" 
     app:layout_constraintTop_toBottomOf="@+id/middleView" 
     app:layout_constraintLeft_toRightOf="@+id/closeTv" 
     app:layout_constraintRight_toRightOf="parent"/> 

</android.support.constraint.ConstraintLayout> 

Répondre

2

Définir LayoutParams de la fenêtre de la boîte de dialogue lors de l'exécution. Celui-ci a travaillé pour moi.

dialog.setContentView(R.layout.dialog_select_location); 
Window window = dialog.getWindow(); 
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
window.setGravity(Gravity.CENTER); 

Bonne chance!

0

Il semble fonctionner si vous Définissez une largeur sur le ConstraintLayout parent au lieu d'utiliser match_parent. C'est la meilleure solution que j'ai pu trouver.