2012-11-29 8 views
8

Ich benutze ein DialogFragment und fand die Breite wird immer immer Vollbild, wenn ich eine innere LinearLayout layout_width = match_parent mache, egal wie viele Einschränkungen ich versuche, durch das Fixieren der Layout_width und minWidth zu erzwingen der Mutteraufnahme, oder das Layout dimens in Create Einstellung()DialogFragment Größe (Breite) ignoriert

dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="@dimen/dialog_width" 
android:layout_height="@dimen/dialog_height" 
android:minWidth="@dimen/dialog_width" 
android:minHeight="@dimen/dialog_height" 
android:orientation="vertical" 
android:paddingTop="5dp"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    ... 
    </LinearLayout> 
</LinearLayout> 

Dialog.java

public class MyDialog extends DialogFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 
     Resources r = getActivity().getResources(); 
     getDialog().getWindow().setLayout((int)r.getDimension(R.dimen.dialog_width), (int)r.getDimension(R.dimen.dialog_height)); 
     return view; 
    } 
} 

die o nly Art, wie ich diese Arbeit machen kann, ist durch die innere Linearlayout layout_width Einstellung = "@ Dimen/dialog_width

gehackt dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
... > 

<LinearLayout 
    android:layout_width="@dimen/dialog_width" 
    android:layout_height="wrap_content"> 
    ... 
    </LinearLayout> 
... 
</LinearLayout> 

Welche Ordnung funktioniert, aber einige Konsequenzen für andere Teile des Dialogs hat. Ist das ein Fehler in Android?

+0

Verwendung RelativeLayout statt Linear setzen – Sameer

Antwort

2

Ich habe keine Dokumentation zu diesem Thema gesehen, aber ich habe irgendwo gelesen (wahrscheinlich auf SO), dass die Parameter layout_width und layout_height des Root-Layouts beim Erstellen des Dialogfelds mit "wrap_content" überschrieben werden.

Ich bin mir nicht sicher, ob das tatsächlich stimmt oder nicht, aber das Layout-Verhalten, das ich gesehen habe, deutet darauf hin, dass es wahr ist. Wie auch immer, ich habe meine Dialoge richtig gestaltet, indem ich angenommen habe, dass dies der Fall ist.

Sie könnten wrap_content auch auf Ihren inneren Layouts versuchen, wo immer es möglich ist. Hardcoded Breiten neigen dazu, über mehrere Geräte nicht gut zu arbeiten.

-2

Ersetzen Sie Code mit diesem

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="@dimen/dialog_width" 
android:layout_height="@dimen/dialog_height" 
android:minWidth="@dimen/dialog_width" 
android:minHeight="@dimen/dialog_height" 
android:orientation="vertical" 
android:paddingTop="5dp"> 
    ... 
</LinearLayout> 

Verwenden Sie eine Linearlayout nur und all die Dinge in ihm

Verwandte Themen