在DialogFragment中去除白色背景

9
这是我如何调用我的DialogFragment:

以下是代码示例:

DialogSelectAccount myDiag=new DialogSelectAccount();
myDiag.show(ft,"Diag" );

以下是(部分)我的DialogFragment的创建方式:
public class DialogSelectAccount extends DialogFragment {
public DialogSelectAccount() {

    }

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
 }

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.dialog_select_account, container, false);
tvMessage = (TextView) rootView.findViewById(R.id.tvMessage);
        btnAccountPublic = (Button) rootView.findViewById(R.id.btnAccountPublic);
        btnAccountEnterprise = (Button) rootView.findViewById(R.id.btnAccountEnterprise);
        tvMessage.setText(message);
        btnAccountPublic.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Login.setAccountType = 2;
                dismiss();
            }
        });
        btnAccountEnterprise.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Login.setAccountType = 1;
                dismiss();
            }
        });
        return rootView;
    }

这是我 DialogSelectAccount 的 XML 代码:

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

    <TextView
        android:id="@+id/tvMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        android:textColor="@android:color/black"
        android:textSize="15dp"
        android:textAlignment="center"
        android:gravity="center_horizontal"
        android:background="#ff26b4e9"
        android:autoText="true">
    </TextView>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#ff26b4e9"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btnAccountPublic"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:text="@string/accountPub"
            android:textColor="#ffffffff"
            android:background = "@drawable/roundedbutton" />

        <Button
            android:id="@+id/btnAccountEnterprise"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:clickable="true"
            android:text="@string/accountEnt"
            android:textColor="#ffffffff"
            android:background = "@drawable/roundedbutton" />
    </LinearLayout>

</LinearLayout>

问题在于总是显示一个令人烦恼的白色背景,如下所示。我该如何移除它?

1
可能是重复的问题:如何创建一个没有标题的DialogFragment? - Phantômaxx
@imin:你看到我的答案了吗? - Yash Sampat
@Y.S. 抱歉,我现在已经被另一个项目占用了。我会在本周末回到这个项目并给你我的答复。谢谢。 - imin
我想知道如何更改窗口背景? - Arst
5个回答

29
在您的DialogFragmentonCreateView()中,替换
View rootView = inflater.inflate(R.layout.dialog_select_account, container, false);

使用

View rootView = inflater.inflate(R.layout.dialog_select_account, container);

此外,将以下内容添加到onViewCreated()中:

getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme);

在 XML 的最外层 LinearLayout 中,更改

android:layout_width="fill_parent"
android:layout_height="fill_parent"

to
android:layout_height="wrap_content"
android:layout_width="wrap_content"

试一下这个。这应该可以工作。


我采用了https://dev59.com/3GUp5IYBdhLWcg3wbnMS提供的解决方案,但由于我测试过你的代码也可以工作,所以我将把它标记为答案。 - imin
您可能还想移除半透明的黑色背景(灰暗),请参阅此答案:https://dev59.com/AHrZa4cB1Zd3GeqPyybK#33800422 - Andrii Bas

2
我建议您在DialogFragment的onCreateDialog中创建一个带有自定义UI的警报对话框。然后,您还可以轻松地为其添加样式,以去除白色背景。"最初的回答"
 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val view = activity!!.layoutInflater.inflate(R.layout.dialogfragment_my_custom_view, null)
    val builder = AlertDialog.Builder(activity!!, R.style.MyDialogTheme)
    return builder
            .setView(view)
            .create()
}

那么你可以像这样创建"MyDialogTheme":

然后您只需像这样创建“ MyDialogTheme”:

<style name="ProgressDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowBackground">@color/automile_transparent</item>
</style>

1
你可以为你的对话框创建样式:

<style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
</style>

并通过以下方法在代码中使用:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new Dialog(getActivity(), R.style.DialogStyle);
}

或者您可以按照以下代码在您的代码中仅为对话框设置FEATURE_NO_TITLE

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
  Dialog dialog = super.onCreateDialog(savedInstanceState);
  dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  return dialog;
}

1

较高版本的Android设备会自动删除标题空间。但对于较低版本,我们需要添加一些代码行。

在onCreateDialog()方法中添加Window.FEATURE_NO_TITLE更为有效。代码如下:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

   Dialog dialog = super.onCreateDialog(savedInstanceState);
   // request a dialog window without the title
   dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
   return dialog;
}

0

在这里我认为你是想隐藏标题栏。使用这个:

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接