在 DialogFragment 中使用 onCreateView 自定义视图

发布于 2024-12-12 03:38:46 字数 2881 浏览 0 评论 0 原文

我已经尝试解决这个问题有一段时间了:

我正在尝试使用 开发网站

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 中使用权重,以编程方式设置宽度/高度 - 一切都无济于事。

Been trying to figure this out for a while now:

I'm trying to create a custom dialog using the standard approach shown on the 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;
    }
}

With the XML being:

<?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>

And after creating and showing the dialog, I'm left with:
enter image description here

The white background has been applied to emphasize the unexpected and unwanted behavior.

Any ideas? I've tried changing width/heights, using weights in a horizontal LinearLayout, setting width/height programatically - all to no avail.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

べ映画 2024-12-19 03:38:46

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

看起来是更好的解决方案。

I found this tricks:
getDialog().getWindow().setBackgroundDrawableResource(R.color.white);

Looks like better solution.

我一向站在原地 2024-12-19 03:38:46

我确实想出了一个廉价的修复方法,但我宁愿不必使用它。

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

I did come up with a cheap fix, which I would rather not have to use.

Adding a 0px height, 2000dp (some huge number) width view anywhere in the layout causes it to fill the dialog frame.

陪我终i 2024-12-19 03:38:46

对于 DialogFragment,宽度和高度为空。创建一个带有填充父级的额外子视图组,它应该适合您。

<?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">

……

With the DialogFragment the width and height are null. Create an extra sub view group with fill parent and it should work for you.

<?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">

.....

幸福还没到 2024-12-19 03:38:46

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

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

If you set attachToRoot = true during inflater.inflate it should show dialog correctly.

View v = inflater.inflate(R.layout.customdialog, container, true);
愿与i 2024-12-19 03:38:46

在我的例子中,我使用relativeLayout作为根视图,它实际上填充了对话框窗口。

I used a relativeLayout as the root view in my case and it actually filled out the dialog windows.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文