2017-09-20 4 views
0

저는 Dialog를 확장하고 setContentView()를 사용하여 커스텀 Dialog를 만들고 있습니다. 문제는 대화 상자를 표시하려고 할 때 내 맞춤 레이아웃 대신 배경 그림자 만 표시된다는 것입니다. RelayLayout에 배치하여 표시 할 사용자 지정 레이아웃을 얻을 수 있었지만 더 나은 솔루션이 있는지 아니면 내가 잘못하고 있는지 궁금해하고 있습니다. constraintLayout 버전 1.0.2 사용. 감사!ConstraintLayout을 커스텀 안드로이드 다이얼로그와 함께 사용하기

<?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> 

답변

2

런타임에 대화 상자의 창을 LayoutParams으로 설정하십시오. 이것은 나를 위해 일했다.

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); 

행운을 빈다.

0

그것은 당신이 경우에 작동하는 것 같군 :

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

는 동일한 결과가 내 R.layout.dialog_events_filter의 단순화 된 버전입니다 : 여기

내 사용자 정의 대화 상자입니다 match_parent를 사용하는 대신 부모 ConstraintLayout에 너비를 설정하십시오. 그것이 내가 찾은 최고의 해결책이다.

관련 문제