10

私は DialogFragment を使用していますが、親ビューの layout_width と minWidth を修正するか、レイアウトを設定することによって、いくつの制約を強制しようとしても、内側の LinearLayout の layout_width=match_parent を作成すると、幅が常にフルスクリーンになることがわかりました。 CreateView() の寸法

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>

ダイアログ.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;
    }
}

これを機能させる唯一の方法は、内側の LinearLayout layout_width="@dimen/dialog_width を設定することです

ハッキングされた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>

これは正常に機能しますが、ダイアログの他の部分に影響を与えます。これは Android のバグですか?

4

2 に答える 2

3

これに関するドキュメントは見たことがありませんが、ダイアログの作成時にルート レイアウトの layout_width および layout_height パラメータが「wrap_content」でオーバーライドされることをどこか (おそらく SO) で読みました。

それが実際に正しいかどうかはわかりませんが、私が見たレイアウトの動作は、それが正しいことを示唆しています。とにかく、これが事実であると仮定して、ダイアログを適切にレイアウトすることができました。

可能な限り、内側のレイアウトでも wrap_content を試してみてください。ハードコーディングされた幅は、複数のデバイスでうまく機能しない傾向があります。

于 2013-06-18T01:46:42.690 に答える