10

我正在使用 DialogFragment 并发现当我制作内部 LinearLayout 的 layout_width = match_parent 时,宽度总是变为全屏,无论我尝试通过修复父视图的 layout_width 和 minWidth 或设置布局来施加多少约束CreateView() 中的尺寸

对话框.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

我还没有看到任何关于此的文档,但我在某处(可能在 SO)读到根布局的 layout_width 和 layout_height 参数在创建对话框时被“wrap_content”覆盖。

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

您可能还想尽可能在​​内部布局上尝试 wrap_content 。硬编码的宽度往往不能在多个设备上很好地工作。

于 2013-06-18T01:46:42.690 回答
-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 把所有的东西都放进去

于 2013-06-18T04:40:38.957 回答