自定义对话框样式的Activity

本文介绍了如何创建自定义对话框样式的Activity,不仅详细讲解了通过设置Window参数来自定义样式,还展示了如何实现点击空白区域Activity不消失的功能。涉及到的文件包括Java代码、XML布局文件和动画资源,以及在AndroidManifest.xml中的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

对话框样式的Activity,除了使用系统的Dialog样式的Theme外,我们还可以自己设置Window的参数来进行自定义。
当然还是可以使用 DialogFragment 来实现。
SecondActivity.java

public class SecondActivity extends AppCompatActivity {
    public static final double SMALL_WIN_H_SCALE = 0.67;
    public static final double SMALL_WIN_W_SCALE = 0.72;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
        actionBar.setHomeAsUpIndicator(R.drawable.close_button);
    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        overridePendingTransition(R.anim.activity_dialog_close_enter, R.anim.activity_dialog_close_exit);
        resizeActivity();
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.activity_dialog_close_enter, R.anim.activity_dialog_close_exit);
    }

    @Override
    public boolean onSupportNavigateUp() {
        finish();
        return super.onSupportNavigateUp();
    }

    private void resizeActivity(){
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        setFinishOnTouchOutside(true);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        layoutParams.copyFrom(getWindow().getAttributes());
        layoutParams.gravity = Gravity.CENTER;
        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        //layoutParams.x = 200;
        layoutParams.width = (int) (displayMetrics.widthPixels * SMALL_WIN_W_SCALE);
        layoutParams.height = (int) (displayMetrics.heightPixels * SMALL_WIN_H_SCALE);

        layoutParams.dimAmount = 0.7f;
        layoutParams.alpha = 1.0f;
        getWindow().setAttributes(layoutParams);

        getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        View view = getWindow().getDecorView();
        if(view != null) {
            view.setBackgroundResource(R.drawable.dialog_activity_bg);
        }
    }
}

dialog_activity_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 填充颜色 -->
    <solid android:color="#ffffffff" />
    <!-- 边框宽度 -->
    <!-- <stroke android:width="3dp" /> -->
    <!-- 圆角半径 -->
    <corners android:radius="8dp" />
    <!-- 内边距 -->
    <!--<padding
        android:bottom="13dp"
        android:left="13dp"
        android:right="13dp"
        android:top="13dp" />-->
</shape>

dialog_exit_interpolator.xml

<?xml version="1.0" encoding="utf-8"?>
<pathInterpolator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:controlX1="0.33"
    android:controlY1="0"
    android:controlX2="0.66"
    android:controlY2="1"/>

activity_dialog_close_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="180"
       android:fromAlpha="1.0"
       android:toAlpha="1.0">

</alpha>

activity_dialog_close_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="180"
       android:fromAlpha="1.0"
       android:interpolator="@interpolator/dialog_exit_interpolator"
       android:toAlpha="0">

</alpha>

style.xml

    <style name="DialogTransparentTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/dodgerblue</item>
        <item name="colorPrimaryDark">@color/dodgerblue</item>
        <item name="colorAccent">@color/dodgerblue</item>

        <item name="android:windowIsTranslucent">true</item>
    </style>

AndroidManifest.xml

        <activity android:name=".ThirdActivity"
                  android:label="ThirdActivity"
                  android:theme="@style/DialogTheme">

        </activity>

效果图

设置点击空白区域Activity不消失

调用

setFinishOnTouchOutside(false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值