Dialog全屏设置

一、Dialog的全屏设置

关于Dialog的全屏设置,网上一大把的方法,但是大多数都不全面或者有一些冗余的设置。这里列出一个最基本的全屏设置方式。

public class FullScreenDialog extends Dialog {

    public FullScreenDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置一个布局
        setContentView(R.layout.dialog_test_fullscreen);
        //设置window背景,默认的背景会有Padding值,不能全屏。当然不一定要是透明,你可以设置其他背景,替换默认的背景即可。
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //一定要在setContentView之后调用,否则无效
        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

其中有两点需要说一下
1. setContentView可以在外部调用,不一定要在自定义的Dialog里面。同理,getWindow().setBackgroundDrawable和getWindow().setLayout也可以在外部调用。如下,

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_test_fullscreen);
dialog.show();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

2. 背景色可以通过指定Dialog的Theme来完成

<style name="AppTheme.FullScreenDialog" parent="ThemeOverlay.AppCompat.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Dialog dialog = new Dialog(this, R.style.AppTheme_FullScreenDialog);
dialog.setContentView(R.layout.dialog_test_fullscreen);
dialog.show();
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

二、AppCompatDialog全屏设置

首先,AppCompatDialog是继承于Dialog的,但是加了一些support v7的一些特性和定制。如果我们直接使用上面的方式来设置,会发现达不到全屏效果,对话框的最顶部会出现部分空白。如下:
这里写图片描述

这个时候,需要额外设置一个属性dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE),话说这个属性我找了很久,最后在support design的BottomSheetDialog看到的。如下:

AppCompatDialog dialog = new AppCompatDialog(this, R.style.AppTheme_FullScreenDialog);
dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_test_fullscreen);
dialog.show();
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

如果是自定义继承于AppCompatDialog,可以直接在构造方法里设置这个属性,完整示例如下:

public class FullScreenDialog extends AppCompatDialog {

    public FullScreenDialog(@NonNull Context context) {
        super(context);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置一个布局
        setContentView(R.layout.dialog_test_fullscreen);
        //设置window背景,默认的背景会有Padding值,不能全屏。当然不一定要是透明,你可以设置其他背景,替换默认的背景即可。
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //一定要在setContentView之后调用,否则无效
        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

三、Supportv7 AlertDialog全屏设置

AlertDialog继承于AppCompatDialog,但是不用设置supportRequestWindowFeature,设置全屏的方式,和普通Dialog一样。如下:

AlertDialog dialog =
        new AlertDialog.Builder(this).setTitle("Title")
                .setMessage("Message")
                .setNegativeButton("Cancel", null)
                .setPositiveButton("Sure", null)
                .create();
dialog.show();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

更正:

上面说必须设置一个背景才能全屏,说的是默认背景有padding值,说错了,padding不会影响这个,而是因为默认背景有inset值,如下:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="16dp"
       android:insetTop="16dp"
       android:insetRight="16dp"
       android:insetBottom="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/white" />
    </shape>
</inset>
要实现Dialog全屏显示,可以通过设置Dialog的Window属性来实现。首先,需要设置Dialog的主题为全屏样式,可以通过设置Dialog的主题来实现。其次,需要通过设置Window的参数来控制Dialog对应的Window的宽度、高度和显示位置等。最后,还需要给Dialog弹出的View设置背景。以下是一个简单的方法来实现Dialog全屏显示: 1. 设置Dialog的主题为全屏样式。可以在Dialog的构造函数中设置主题为全屏样式。 2. 设置Window的参数。可以通过获取Dialog的Window对象,然后设置Window的LayoutParams来控制Dialog对应的Window的宽度、高度和显示位置等。可以使用以下代码: ```java DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); int maxWidth = dm.widthPixels; int maxHeight = dm.heightPixels; AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.getWindow().getDecorView().setPadding(0, 0, 0, 0); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000)); alertDialog.getWindow().setLayout(maxWidth, maxHeight); ``` 3. 设置Dialog弹出的View的背景。在设置Dialog的View之前,需要给Dialog弹出的View设置一个背景,可以通过设置View的背景来实现。确保Dialog弹出的View有背景。 以上步骤可以实现Dialog全屏显示效果。通过设置Dialog的主题、Window的参数和View的背景,可以控制Dialog对应的Window的宽度、高度和显示位置,从而实现Dialog全屏显示的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [如何设置Dialog铺满全屏,更改Dialog的显示位置!!!](https://blog.csdn.net/u011043551/article/details/69062925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [android Dialog全屏显示](https://blog.csdn.net/jx315425246/article/details/125611497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值