DialogFragment устанавливает высоту диалога - PullRequest
12 голосов
/ 22 января 2012

Я только что использовал созданный первый диалог с использованием DialogFragment. Все отлично работает, за исключением того, что я не могу заставить Диалог обернуть его макет. Мой макет имеет высоту всех элементов до wrap_content.

В MyFragmentDialog Я даже не могу найти метод, который подразумевал бы, что его можно использовать для установки высоты FragmentDialog. Что мне не хватает? Как сделать так, чтобы DialogFragment соответствовал его содержанию?

Метод DialogFrament onCreateView:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Set title for this dialog
    getDialog().setTitle("Backup & Restore");
    getDialog().setCancelable(true);

    View v = inflater.inflate(R.layout.backup_restore, container, false);
    TextView msg = (TextView) v.findViewById(R.id.br_label_message);
    msg.setText("Backups are placed in the Downloads Directory:\n" + BACKUP_PATH.getAbsolutePath());
    // TextView files_label = (TextView) v.findViewById(R.id.label_restore);
    Spinner files = (Spinner) v.findViewById(R.id.br_restore_file);

    if (BACKUP_PATH.exists()) {
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File dir, String filename) {
                File sel = new File(dir, filename);
                return filename.contains(FTYPE) || sel.isDirectory();
            }
        };
        mFileList = BACKUP_PATH.list(filter);
    } else {
        mFileList = new String[0];
    }

    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getActivity(), android.R.layout.simple_spinner_item, mFileList);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    files.setAdapter(adapter);
    files.setOnItemSelectedListener(this);

    Button backup = (Button) v.findViewById(R.id.br_backup_btn);
    Button restore = (Button) v.findViewById(R.id.br_restore_btn);
    Button cancel = (Button) v.findViewById(R.id.br_cancel_btn);

    backup.setOnClickListener(this);
    restore.setOnClickListener(this);
    cancel.setOnClickListener(this);

    return v;
}

Это макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dp" >

    <TextView
        android:id="@+id/br_label_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="8dp"
        android:text=""
        android:textSize="14sp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/br_tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/br_label_restore"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="8dp"
                android:text="Restore file"
                android:textSize="14sp" />

            <Spinner
                android:id="@+id/br_restore_file"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </TableRow>
    </TableLayout>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow>

            <Button
                android:id="@+id/br_restore_btn"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight=".5"
                android:text="Restore"
                android:textSize="14sp" />

            <Button
                android:id="@+id/br_backup_btn"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight=".5"
                android:text="Backup"
                android:textSize="14sp" />
        </TableRow>
    </TableLayout>

    <Button
        android:id="@+id/br_cancel_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Cancel"
        android:textSize="14sp" />

</LinearLayout>

Спасибо

Ответы [ 4 ]

29 голосов
/ 22 января 2012

Оказывается, проблема с LinearLayout, несмотря на установку высоты, в DialogFragment, кажется, занимает больше места, чем я хочу. Я переключил макет, чтобы он был RelativeLayout, а содержимое Dialog, кажется, изменило размер, чтобы соответствовать содержимому.

6 голосов
/ 06 февраля 2015

Вы можете заставить его работать со всеми видами макетов, добавив размер макета в onResume вашего dialogFragment:

  @Override
    public void onResume()
    {
        super.onResume();
        Window window = getDialog().getWindow();
        window.setLayout(300, 300);
        window.setGravity(Gravity.CENTER);
}
4 голосов
/ 22 января 2012

Я сделал скачок в API Dialog, поэтому я точно не уверен, но вы можете попробовать вызвать getWindow в диалоговом окне, а затем вызвать setLayout (width, height)

getDialog().getWindow().setLayout(300,300);
0 голосов
/ 27 марта 2012

Я не вижу верхней части вашего тега LinearLayout, но я видел случаи, когда все, что было необходимо, это атрибут

android:orientation="vertical"

XML.Это может вызвать головную боль, но, к счастью, ее легко исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...