2012-01-22 14 views
12

Używałem stworzony przez pierwszy Dialog użyciu DialogFragment. Wszystko działa wspaniale, ale nie mogę uzyskać okna dialogowego, aby zawinąć jego układ. Mój układ ma wysokość wszystkich elementów do wrap_content.DialogFragment ustawić wysokość Dialog

W MyFragmentDialog Nie mogę znaleźć metody, która oznaczałaby, że można jej użyć do ustawienia wysokości FragmentDialog. czego mi brakuje? Jak sprawić, aby DialogFragment pasował do treści?

DialogFrament „s onCreateView metoda:

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

To jest układ:

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

Dzięki,

Odpowiedz

29

Okazuje się, że problem z LinearLayout mimo ustawienie wysokości na nim, w DialogFragment wydaje się brać więcej miejsca, niż chcemy. Zmieniłem układ na RelativeLayout treść wydaje się zmieniać rozmiar, aby dopasować zawartość.

+0

Hej możesz wysłać rozwiązanie? czy ustawiłeś wysokość względnego układu lub wrap_content? – Ads

+0

szerokość to 'match_parent', wysokość to' wrap_content'. Daj mi znać, jeśli nadal potrzebujesz, aby opublikować rozwiązanie. – Ali

+0

Dzięki Ali.i wykonane dzieło around.i owinięte istniejący układ z układem względna, którego szerokość i wysokość są match_parent.Sure u można pisać odpowiedź, która będzie użyteczna dla innych, jeśli to konieczne. – Ads

4

wziąłem skok w oknie dialogowym api więc na pewno nie jestem pewien, ale możesz spróbować wywołać getWindow na t on okno i następnie zadzwonić setLayout (szerokość, wysokość)

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

Dzięki Bram, ale okazuje się, że problem z 'LinearLayout' I przełączono go na 'RelativeLayout', a zawartość' Dialog' wydaje się zmieniać rozmiar, aby dopasować zawartość. – Ali

0

nie widzę górną część tagu LinearLayout, ale widziałem przypadki, w których wszystko, co było potrzebne było atrybut XML

android:orientation="vertical" 

. Może powodować bóle głowy, ale na szczęście łatwo je naprawić.

5

Można zrobić to praca z wszelkiego rodzaju układ dodaniem wielkości układu w onResume swojej dialogFragment:

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

Spośród 100s rozwiązania, które znalazłem na SO dla tego głupiego problemu, to ten, który działał i utrzymywał mnie przy zdrowych zmysłach jeszcze jeden dzień. – Gyome

+0

pracował dla mnie :) –

+0

@Gyome proszę odnieść się do tej kwestii - https: // stackoverflow.com/questions/45494644/how-to-set-of-the-dialog-fragment-dokładnie-in-android –

Powiązane problemy