2012-01-22 13 views
12

Acabo de usar creado por el primer cuadro de diálogo utilizando DialogFragment. Todo funciona muy bien, excepto que no puedo obtener el cuadro de diálogo para envolver su diseño. Mi diseño tiene la altura de todos los elementos a wrap_content.DialogFragment set height of Dialog

En MyFragmentDialog Ni siquiera puedo encontrar un método que implique que se puede usar para establecer la altura del FragmentDialog. ¿Qué me estoy perdiendo? ¿Cómo hago para que un DialogFragment se ajuste a su contenido?

El DialogFrament 's onCreateView método:

@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; 
} 

Esta es la disposición:

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

Gracias,

Respuesta

29

Resulta ser un problema con LinearLayout a pesar de marcar una altura sobre el mismo, en DialogFragment parece estar tomando más espacio del que quiero que haga. Cambié el diseño para que sea RelativeLayout, el contenido Dialog parece cambiar el tamaño para adaptarse al contenido.

+0

¿puedes publicar la solución? ¿Estableciste la altura para el diseño relativo o wrap_content? – Ads

+0

El ancho era 'match_parent', height was' wrap_content'. Avíseme si aún necesita que publique la solución. – Ali

+0

Gracias Ali.i hizo un trabajo around.i envuelto el diseño existente con un diseño relativo cuyo ancho y altura son match_parent.Sure, puede publicar la respuesta que será útil para otros, si es necesario. – Ads

4

me dio un salto en el API de diálogo por lo que ciertamente no estoy seguro, pero podría tratar de llamar a getWindow en t él y de diálogo a continuación, llamar setLayout (anchura, altura)

getDialog().getWindow().setLayout(300,300); 
+0

Gracias Bram, pero resulta ser un problema con 'Me LinearLayout' lo cambié a un 'RelativeLayout' y el contenido' Dialog' parece cambiar el tamaño para ajustarse al contenido. – Ali

0

no veo la parte superior de la etiqueta LinearLayout, pero he visto casos en los que todo lo que se necesitaba era el atributo XML

android:orientation="vertical" 

. Puede causar dolor de cabeza pero, afortunadamente, es fácil de corregir.

5

Puede hacerlo funcionar con todo tipo de diseño en la adición del tamaño del diseño en el onResume de su dialogFragment:

@Override 
    public void onResume() 
    { 
     super.onResume(); 
     Window window = getDialog().getWindow(); 
     window.setLayout(300, 300); 
     window.setGravity(Gravity.CENTER); 
} 
+0

Fuera de los 100 de soluciones que he encontrado en SO para este estúpido problema, este es el que funcionó y me mantuvo cuerdo un día más. – Gyome

+0

funcionó para mí :) –

+0

@Gyome por favor consulte esta pregunta - https: // stackoverflow.com/questions/45494644/how-to-set-the-height-of-the-dialog-fragment-accurate-in-android –