Подтвердить что ты не робот

Изменить высоту настраиваемого диалога в диалоговом окне диалога

Я создал пользовательский диалог, код ниже. Проблема в том, что высота диалога становится wrap_content, то есть она не зависит от высоты, которую я упоминаю в xml. Я проверил другие вопросы, они не помогают мне.

public class PointsDialogFragment extends DialogFragment{

    private static final String TAG = PointsDialogFragment.class.getSimpleName();

    public static PointsDialogFragment newInstance(){
        PointsDialogFragment pdf = new PointsDialogFragment();
        Bundle newBundle = new Bundle();
        pdf.setArguments(newBundle);
        return pdf;
    }

    private View mRoot;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getDialog().requestWindowFeature(STYLE_NO_TITLE);
        mRoot = inflater.inflate(R.layout.fragment_points_dialog, null);
        return mRoot;
    }
}

а xml для fragment_points_dialog.xml -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="313dp"
    android:layout_width="fill_parent"
    android:background="@color/green_gradient_start"
>
    <RelativeLayout 
        android:layout_width="173dp"
        android:layout_height="242dp"
        android:background="@drawable/reward_box"
        android:id="@+id/reward_box"
        android:layout_alignParentLeft="true"
    >
        <TextView 
            android:layout_centerInParent="true"
            style="@style/WallSectionHeading"
            android:text="5"
        />
    </RelativeLayout>
    <RelativeLayout 
        android:layout_width="173dp"
        android:layout_height="250dp"
        android:background="@drawable/reward_mascot"
        android:layout_alignParentRight="true"
    >
        <LinearLayout
            android:id="@+id/reward_cloud"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:background="@drawable/reward_cloud"
            android:layout_alignParentBottom="true"
        >
            <TextView
                android:layout_gravity="center_vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="You have gained 5 Delight Points"
                android:textColor="@color/white"
                android:textStyle="italic"
                android:paddingLeft="15dp"
                android:paddingRight="10dp"
            />
        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

Я показываю диалог вот так.

PointsDialogFragment pdf = PointsDialogFragment.newInstance();
pdf.show(getFragmentManager(), "dialog");

Я хотел бы знать способ, которым я могу изменить высоту диалога с помощью фрагмента диалога.

4b9b3361

Ответ 1

Я думаю, проблема заключается в том, что когда вы раздуваете представление, вы не поставляете ViewParent. Когда вы не укажете этот параметр, любые параметры "layout_X" в корне вашего представления будут проигнорированы, так как эти значения предоставляются родительскому объекту (который является нулевым в вашей текущей ситуации). То, что вы можете сделать, либо предоставить ViewParent при раздувании или переносе вашего XML-представления в другую ViewGroup, оставив абсолютные параметры макета на втором уровне.

Пример кода: mRoot = inflater.inflate(R.layout.fragment_points_dialog, container, false);

Ответ 2

В вашем диалоговом окне DialogFragment вместо использования LinearLayout используйте RelativeLayout и установите layout_height в wrap_content, он автоматически изменит размер представления.

Удостоверьтесь, что не используйте выравнивание нижнего дна, иначе оно заполнит экран.