2012-01-22 17 views
12

Ho appena usato creato dalla prima finestra di dialogo che utilizza DialogFragment. Tutto funziona alla grande, tranne che non riesco a ottenere la finestra di dialogo per avvolgere il suo layout. Il mio layout ha l'altezza di tutti gli elementi a wrap_content.DialogFragment set height of Dialog

In MyFragmentDialog Non riesco nemmeno a trovare un metodo che implichi che possa essere utilizzato per impostare l'altezza dello FragmentDialog. Cosa mi manca? Come faccio a fare in modo che DialogFragment si adatti al contenuto?

s' Il DialogFramentonCreateView metodo:

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

Questo è il layout:

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

Grazie,

risposta

29

Si scopre ad essere un problema con LinearLayout nonostante l'impostazione di altezza su di esso, in DialogFragment che sembra prendere più spazio di quanto voglio io. Ho cambiato il layout in modo che sia RelativeLayout il contenuto Dialog sembra ridimensionarsi per adattarsi al contenuto.

+0

hey puoi pubblicare la soluzione? hai impostato l'altezza per il layout relativo o wrap_content? La larghezza di – Ads

+0

era 'match_parent', l'altezza era' wrap_content'. Fammi sapere se hai ancora bisogno che io pubblichi la soluzione. – Ali

+0

Grazie a Ali.i ho fatto un giro. Ho avvolto il layout esistente con un layout relativo la cui larghezza e altezza sono match_parent.Sure, puoi postare la risposta che sarà utile per gli altri, se necessario. – Ads

4

ho preso un salto nel API di dialogo in modo da sicuramente non sono sicuro ma potresti provare a chiamare getWindow su t a finestra di dialogo e quindi chiamare setLayout (larghezza, altezza)

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

Grazie Bram, ma si rivela essere un problema con 'LinearLayout' I convertito in 'RelativeLayout' e il contenuto' Dialog' sembra ridimensionarsi per adattarsi al contenuto. – Ali

0

non vedo la parte superiore del vostro tag LinearLayout, ma ho visto casi in cui tutto ciò che era necessario era l'attributo XML

android:orientation="vertical" 

. Può causare mal di testa ma è fortunatamente facile da risolvere.

5

È possibile farlo funzionare con tutti i tipi di layout in aggiunta la dimensione del layout nel onResume del vostro dialogFragment:

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

Out of the 100s of soluzioni che ho trovato su SO per questo stupido problema, questo è quello che ha funzionato e mi ha tenuto sano di mente un giorno in più. – Gyome

+0

ha funzionato per me :) –

+0

@Gyome fai riferimento a questa domanda - https: // StackOverflow.com/domande/45494644/how-to-set-the-altezza-of-the-dialogo-frammento-precisione-in-Android –