изменить высоту настраиваемого диалога во фрагменте диалога - PullRequest
10 голосов
/ 31 октября 2011

Я создал собственный диалог, код приведен ниже. Проблема в том, что высота диалога становится 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 для frag_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");

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

Ответы [ 2 ]

17 голосов
/ 31 октября 2011

Мне кажется, проблема в том, что когда вы раздуваете View, вы не предоставляете ViewParent.Если вы не предоставите этот параметр, все параметры layout_X в корне вашего представления будут игнорироваться, так как эти значения передаются родительскому элементу (что является нулевым в вашей текущей ситуации).Что вы можете сделать, это либо предоставить ViewParent при накачке, либо обернуть ваш XML View в другую ViewGroup, оставив абсолютные параметры макета на 2-м уровне.

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

2 голосов
/ 07 октября 2015

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

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

...