在DialogFragment中使用onCreateView的自定义视图

时间:2011-10-26 22:15:19

标签: android user-interface

现在试图解决这个问题一段时间了:

我正在尝试使用Dev site上显示的标准方法创建自定义对话框。

public class CustomDialog extends DialogFragment {    
    private OnDialogResultListener mOnDialogResultListener = null;
    public void setOnDialogResultListener(OnDialogResultListener dialogResultListener) {
        mOnDialogResultListener = dialogResultListener;
    }

    public static CustomDialog newInstance(OnDialogResultListener dialogResultListener) {
        CustomDialog frag = new CustomDialog();        
        frag.setOnDialogResultListener(dialogResultListener);
        return frag;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().setTitle(getString(R.string.Dialog_CustomDialog_Title));
        View v = inflater.inflate(R.layout.customdialog, container, false);
        return v;
    }
}

使用XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_height="fill_parent" android:background="@color/white" android:layout_margin="0px" android:layout_width="fill_parent">
    <EditText android:hint="@string/Dialog.CustomDialog.OldPassword" android:layout_marginBottom="@dimen/normalMargin" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/EditText02" android:layout_width="fill_parent"></EditText>
    <EditText android:hint="@string/Dialog.CustomDialog.NewPassword" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/EditText01" android:layout_width="fill_parent"></EditText>
    <EditText android:hint="@string/Dialog.CustomDialog.RetypePassword" android:layout_height="wrap_content" android:inputType="textPassword" android:id="@+id/editText1" android:layout_width="fill_parent">
        <requestFocus></requestFocus>
    </EditText>
    <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="fill_parent">
        <Button android:layout_height="wrap_content" android:text="@string/save" android:layout_width="@dimen/normalButtonWidth" android:id="@+id/btn_Custom_save"></Button>
        <Button android:layout_height="wrap_content" android:text="@string/cancel" android:layout_width="@dimen/normalButtonWidth" android:id="@+id/btn_Custom_cancel"></Button>
    </LinearLayout>
</LinearLayout>

创建并显示对话框后,我留下: enter image description here

白色背景已用于强调意外和不受欢迎的行为。

有什么想法吗?我试过改变宽度/高度,在水平LinearLayout中使用权重,以编程方式设置宽度/高度 - 一切都无济于事。

5 个答案:

答案 0 :(得分:2)

我发现了这个技巧: getDialog()getWindow()setBackgroundDrawableResource(R.color.white);

看起来更好的解决方案。

答案 1 :(得分:1)

我确实想出了一个廉价的修补程序,我宁愿不必使用它。

在布局中的任何位置添加0px高度,2000dp(某些大数字)宽度视图会导致它填充对话框。

答案 2 :(得分:0)

使用DialogFragment,width和height为null。使用填充父级创建一个额外的子视图组,它应该适合您。

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

        <LinearLayout android:orientation="vertical"
  android:layout_height="fill_parent" android:background="@color/white" android:layout_margin="0px" android:layout_width="fill_parent">

.....

答案 3 :(得分:0)

如果在inflater.inflate期间设置了attachToRoot = true,它应该正确显示对话框。

View v = inflater.inflate(R.layout.customdialog, container, true);

答案 4 :(得分:0)

在我的情况下,我使用了relativeLayout作为根视图,它实际上填写了对话框窗口。