现在试图解决这个问题一段时间了:
我正在尝试使用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>
创建并显示对话框后,我留下:
白色背景已用于强调意外和不受欢迎的行为。
有什么想法吗?我试过改变宽度/高度,在水平LinearLayout中使用权重,以编程方式设置宽度/高度 - 一切都无济于事。
答案 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作为根视图,它实际上填写了对话框窗口。