DialogFragment大小(宽度)被忽略

时间:2012-11-29 18:32:34

标签: android android-dialogfragment

我正在使用DialogFragment,当我创建一个内部LinearLayout的layout_width = match_parent时,发现宽度始终变为全屏,无论我试图通过固定父视图的layout_width和minWidth强制使用多少个约束,或者在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>

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

我能做到这一点的唯一方法是设置内部LinearLayout layout_width =“@ dimen / dialog_width

hacked 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中的错误吗?

2 个答案:

答案 0 :(得分:3)

我还没有看到任何关于这方面的文档,但我在某处(可能是在SO上)读到了在创建对话框时根据'wrap_content'覆盖了根布局的layout_width和layout_height参数。

我不确定这是否真实,但我见过的布局行为表明这是真的。无论如何,我已经通过假设这种情况来正确地布局我的对话框。

您可能希望尽可能在内部布局上尝试wrap_content。硬编码宽度往往不能在多个设备上正常工作。

答案 1 :(得分:-2)

用此

代替您的代码
<?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> 

只使用一个LinearLayout并将所有内容放入其中