188

我正在尝试显示几乎全屏的 DialogFragment。但我不知何故不能这样做。

我展示片段的方式直接来自 android 开发者文档

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

我知道天真地试图将片段中的 RelativeLayout 设置为 fill_parent 和一些 minWidth 和 minHeight。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

我知道期望 DialogFragment 填满屏幕的大部分。但我似乎只在垂直方向上调整大小,但只在水平方向上调整一些固定宽度。

我还尝试在代码中设置窗口属性,如下所示:http ://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec 。但这也无济于事。

我可能对 Android 如何处理对话框有误解,因为我是全新的。我怎么能做这样的事情?有没有其他方法可以达到我的目标?


Android 设备:
华硕 EeePad Transformer
Android 3.0.1


更新: 我现在设法将其全屏显示,片段中包含以下代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

不幸的是,这不是我想要的。我肯定需要在对话框周围有一个小的“填充”来显示背景。

任何想法如何做到这一点?

4

31 回答 31

217

全屏获取 DialogFragment

像这样覆盖onStart您的 DialogFragment:

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

非常感谢这篇文章:The-mystery-of-androids-full-screen-dialog-fragments

于 2014-10-02T14:42:08.030 回答
164
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}
于 2013-02-21T14:03:41.210 回答
74

尝试切换到 aLinearLayout而不是RelativeLayout. 测试时我的目标是 3.0 Honeycomb api。

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

布局fragment_dialog.xml

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

主要的.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>
于 2011-08-26T17:43:39.507 回答
60

仅使用样式制作全屏 DialogFragment

第一个解决方案

1. 添加到您的style.xml

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>

2. 添加到您的 DialogFragment:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

替代解决方案

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.FullScreenDialog)
}
于 2017-09-30T18:13:26.877 回答
48

根据此链接DialogFragment 全屏显示两侧的填充,这将像一个魅力。

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}
于 2014-09-02T12:13:55.300 回答
18

就我而言,我使用了以下方法:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

加上 LinearLayout 用内容填充所有空间。

但在某些 Lollipop+ 设备(例如 Nexus 9)上,对话框的左右边缘与屏幕边缘之间仍然存在小间隙。

这并不明显,但最后我发现要使其在所有设备和平台上全宽,窗口背景应该在styles.xml中指定,如下所示:

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

当然,当我们创建如下对话框时需要使用这种样式:

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}
于 2015-07-23T20:57:29.907 回答
16

我之前在使用全屏 dialogFragment 时遇到了这个问题:设置全屏时总是有填充。在 dialogFragment 的 onActivityCreated() 方法中尝试以下代码:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}
于 2013-11-21T09:01:19.487 回答
13

就 Android API 的更新而言,显示全屏对话框的建议方法如下:

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

否则,如果您不希望它全屏显示,您可以这样做:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

希望能帮助到你。

编辑

请注意,我提供的解决方案有效,但有一个弱点,有时可能会很麻烦。将 DialogFragment 添加到android.R.id.content容器将不允许您DialogFragment#setCancelable()正确处理该功能,并且在将 DialogFragment 本身添加到后台堆栈时也可能导致意外行为。

因此,我建议您在 onCreate 方法中简单地更改 DialogFragment 的样式,如下所示:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar);
}

希望能帮助到你。

于 2015-05-21T08:06:59.593 回答
12

还有 kotlin 版本!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}
于 2019-05-28T23:29:36.680 回答
11

尝试在 onCreate 中使用 setStyle() 并覆盖 onCreateDialog 制作没有标题的对话框

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme);        
}

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

或者只是覆盖 onCreate() 和 setStyle 伙伴代码。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme);        
}
于 2012-11-19T06:38:06.950 回答
8

它确实可以取决于布局的定义方式。但是为了确保对话框获得所需的大小,最好的解决方案是在显示对话框后(而不是在创建时)提供 LayoutParams。在 DialogFragment 上,对话框显示在onStart方法上,因此获得全宽的有效方法是:

@Override public void onStart() {
    super.onStart();
    Dialog d = getDialog();
    if (d!=null){
        d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

要同时提供主题或样式,例如 NO_TITLE 样式,最好的位置是onCreate方法:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}
于 2013-09-08T12:58:32.357 回答
8

注意:甚至可以在这里找到正确的答案。但我想澄清一个困惑。

使用下面的代码android.app.DialogFragment

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

使用下面的代码android.support.v4.app.DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}
于 2018-07-31T07:19:50.007 回答
6

实现这一目标的最简单方法是:

将以下主题添加到您的 styles.xml

<style name="DialogTheme" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowIsFloating">false</item>
</style>

并在您的类扩展 DialogFragment 中,覆盖

@Override
public int getTheme() {
    return R.style.DialogTheme;
}

这也适用于 Android OS 11(R)。

https://anubhav-arora.medium.com/android-full-screen-dialogfragment-1410dbd96d37

于 2020-11-11T10:06:04.880 回答
4

这是我如何解决这个问题的解决方案:

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

    return dialog;
}

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
}
于 2014-10-05T21:40:35.363 回答
3

在您的 style.xml 中创建以下主题:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

然后在 DialogFragment 中设置样式

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}
于 2017-12-02T09:07:29.063 回答
2

Chirag Nagariya 是对的,除了 '_Fullscreen' 添加。它可以使用任何不是从对话框样式派生的基本样式来解决。'android.R.style.Theme_Black_NoTitleBar' 也可以使用。

于 2013-04-20T06:27:00.257 回答
2

即使您正在处理相对布局,以下方式也将起作用。请按照以下步骤操作:

  1. 转到主题编辑器(在工具-> Android -> 主题编辑器下可用)
  2. 选择显示所有主题。选择带有AppCompat.Dialog的那个
  3. 如果您希望它具有任何特定的彩色背景或透明背景,请选择选项 android 窗口背景。
  4. 选择颜色并点击确定。选择新主题的名称。
  5. 进入styles.xml,然后在刚刚添加的主题下,添加这两个属性:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    

我的对话框主题设置如下:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

确保主题的父主题为Theme.AppCompat.Dialog 另一种方法是在 styles.xml 中创建一个新样式并按照上面的代码进行更改。

  1. 转到您的 Dialog Fragment 类并在onCreate()方法中,将 Dialog 的样式设置为:

    @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL,R.style.DialogTheme); }

于 2017-06-29T13:32:51.503 回答
1

万一其他人遇到这种情况,我也有类似的经历,但事实证明问题是我忘记从 onCreateView 返回膨胀的视图(而不是返回默认的 super.onCreateView)。我只是返回了正确的膨胀视图并解决了问题。

于 2012-03-21T18:56:32.633 回答
1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

此方案在对话框上应用全屏主题,类似于 Chirag 在 onCreate 中的 setStyle。一个缺点是没有使用 savedInstanceState。

于 2015-08-13T16:30:54.277 回答
1

试试这个用于多种用途的通用片段对话框。希望这将帮助您投注

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}
于 2016-08-23T10:17:44.457 回答
1

这是您需要设置为片段的内容:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

在你的情况下:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

为什么?因为 DialogFragment (当没有明确告知时)将使用其内部样式将您的自定义布局包装在其中(无全屏等)。

和布局?不需要hacky方式,这工作得很好:

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

享受

于 2016-09-01T17:53:30.223 回答
1

我回答这个问题很晚了,我仍然想分享这个答案,以便将来任何人都可以使用它。

我在我的项目中使用了此代码,它适用于较低版本和较高版本。

只需在 onCreateDialog() 中使用这个主题,如下所示:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen - 这是这个主题的源代码,你可以看到只有这个主题足以让 DialogFragment 全屏显示。

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

如果有人遇到任何问题,请告诉我。希望这会有所帮助。谢谢 :)

于 2017-06-26T10:52:30.817 回答
1

在全屏对话框的样式中添加以下行。

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
于 2019-04-16T06:58:19.940 回答
0

window.setLayout对于旧设备来说是不够的。

这是我所做的:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}
于 2015-03-25T12:14:50.393 回答
0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
于 2019-04-16T06:53:51.190 回答
0

使用新的解决方案是用固定的minHeight 和 minWidthConstraintLayout包装。如果没有包装,ConstraintLayout 不会为对话框获得正确的大小。ConstraintLayoutLinearLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>
于 2019-05-08T14:10:49.593 回答
0

在 Kotlin 为我工作,

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}
于 2020-04-02T08:38:06.357 回答
0

以下解决方案对我有用其他解决方案在侧面给了我一些空间,即不是全屏

您需要更改 onStart 和 onCreate 方法

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
于 2020-06-23T11:16:19.753 回答
0

没有更多需要更复杂代码的样式..带有状态栏..

public static void ShowFullScreenDialog(Context context, View contentView, string header)
        {

            using (Android.Support.V7.App.AlertDialog.Builder builder = new Android.Support.V7.App.AlertDialog.Builder(context, Android.Resource.Style.ThemeBlackNoTitleBarFullScreen))
            {
                var view = UIHelper.InflaterView(context, Resource.Layout.dialog_full_screen);
                builder.SetView(view);
                Dialog dialog = builder.Create();
                dialog.Window.SetBackgroundDrawableResource(ThemeHelper.GetMainActivityThemeDrawable());
                dialog.Window.SetLayout(context.Resources.DisplayMetrics.WidthPixels, context.Resources.DisplayMetrics.HeightPixels);
                dialog.Window.DecorView.SystemUiVisibility = StatusBarVisibility.Visible;
                
                //fullLinear
                var headtxt = view.FindViewById<TextView>(Resource.Id.headertxt);
                headtxt.SetTextColor(Color.White);
                headtxt.Text = header;
                var fullLinear = view.FindViewById<LinearLayout>(Resource.Id.fullLinear);
                var closeBttn = view.FindViewById<ImageButton>(Resource.Id.closeBttn);
                closeBttn.ImageTintList = ColorHelper.ConvertColorToStateList(Color.White);
                closeBttn.Click += delegate
                {
                    dialog.Hide();
                };
                if (contentView.Parent != null)
                    ((ViewGroup)contentView.Parent).RemoveView(contentView); // <- fix
                fullLinear.AddView(contentView);
                
                dialog.Show();
            }
            
        }

重要的

dialog.Window.SetLayout(context.Resources.DisplayMetrics.WidthPixels, context.Resources.DisplayMetrics.HeightPixels);
于 2021-01-29T03:51:01.927 回答
0
class NameDialog : DialogFragment(){
lateinit  var mDataBinding:NameYourLayoutBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
         super.onCreateView(inflater, container, savedInstanceState)
        mDataBinding=DataBindingUtil.inflate(
            LayoutInflater.from(getContext()),
            R.layout.YOUR.LAYOUT.NAME,
            null,
            false
        )
        dialog?.let {
            it.window?.requestFeature(Window.FEATURE_NO_TITLE)
            it.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        }
        return mDataBinding.root
    }



    override fun onStart() {
        super.onStart()
        dialog?:return
            val width = ViewGroup.LayoutParams.MATCH_PARENT
            val height = ViewGroup.LayoutParams.MATCH_PARENT
            dialog?.window?.setLayout(width, height)

    }

}
于 2021-06-25T05:11:19.263 回答
0

这是运行全屏对话框的有效发现:

AlertDialog.Builder(activity, R.style.Theme_AppName_PopupOverlay)

与相应的主题:

<!--night\theme-->
<style name="Theme.AppName.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
    <!--text-->
    <item name="colorPrimary">@color/white</item>
    <!--title-->
    <item name="android:textColor">@color/white</item>
    <!--window color-->
    <item name="android:backgroundTint">@color/grey_dark</item>
</style>

Alert Dialog Builder 还需要对 Day 主题的 PopupOverlay 的引用。所以我只有:

<style name="Theme.AppName.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
于 2022-02-07T13:28:24.937 回答