android中实现自定义一个退出的对话框

1.在res目录下创建一个anim目录
2.新建一个enter_anim.xml文件,这为对话框进入时的动画

<?xml version="1.0" encoding="utf-8"?>
<!--
    开始动画
    android:fromYDelta="-100%": 重手机的头部开始
    android:duration = "200": 设置执行的时间
-->

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="-100%"
    android:duration = "200">
</translate>

3.新建一个exit_anim.xml文件,这为对话框退出时的动画

<?xml version="1.0" encoding="utf-8"?>
<!--
    退出动画
    android:fromYDelta="0%": 从手机的中部开始
    android:toYDelta="100%":到时手机的底部结束
    android:duration = "200":执行的时间为毫秒

-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0%"
    android:toYDelta="100%"
    android:duration = "200">
</translate>

4.在value目录下的style文件中加入

<!-- 自定义对话框的进入和退出动画 -->
    <style name="dialogStyle" parent="android:Animation">

        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>

    </style>

5.在程序中写入

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            //创建一个对话框
            al = new AlertDialog.Builder(this).create();
            //设置对话框显示
            al.show();
            //把这个对话框的窗口得到
            window = al.getWindow();
            //设置显示的位置为居中显示
            window.setGravity(Gravity.CENTER);
            //设置对话框的动画样式
            window.setWindowAnimations(R.style.dialogStyle);
            //设置对话框的layout文件
            window.setContentView(R.layout.dialog_layout);
            //找到对应的按键
            queding = window.findViewById(R.id.bt_queding);
            cancel = window.findViewById(R.id.bt_cancel);
            //调用定义的按键事件监听方法
            initEvent();
        }
        return super.onKeyDown(keyCode, event);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,实现一个自定义对话框,包括标题、提示内容、确定和取消按钮,并在按下回退键时提示用户是否退出应用。 首先,在 res/layout 文件夹下创建一个 XML 布局文件,命名为 custom_dialog.xml,如下所示: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textStyle="bold" /> <TextView android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:lineSpacingMultiplier="1.2" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="horizontal"> <Button android:id="@+id/positive_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="确定" /> <Button android:id="@+id/negative_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_weight="1" android:text="取消" /> </LinearLayout> </LinearLayout> ``` 这个布局包含了一个垂直排列的 LinearLayout,其包括一个 TextView 用于显示标题,一个 TextView 用于显示提示内容,以及一个水平排列的 LinearLayout,其包括一个确定按钮和一个取消按钮。 接下来,在 Java 代码,创建一个继承自 DialogFragment 的类 CustomDialog,实现自定义对话框的逻辑,如下所示: ``` public class CustomDialog extends DialogFragment { private String mTitle; private String mMessage; private DialogInterface.OnClickListener mPositiveListener; private DialogInterface.OnClickListener mNegativeListener; public CustomDialog(String title, String message, DialogInterface.OnClickListener positiveListener, DialogInterface.OnClickListener negativeListener) { mTitle = title; mMessage = message; mPositiveListener = positiveListener; mNegativeListener = negativeListener; } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = requireActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.custom_dialog, null); TextView titleView = view.findViewById(R.id.title); titleView.setText(mTitle); TextView messageView = view.findViewById(R.id.message); messageView.setText(mMessage); Button positiveButton = view.findViewById(R.id.positive_button); positiveButton.setOnClickListener(v -> { dismiss(); mPositiveListener.onClick(getDialog(), DialogInterface.BUTTON_POSITIVE); }); Button negativeButton = view.findViewById(R.id.negative_button); negativeButton.setOnClickListener(v -> { dismiss(); mNegativeListener.onClick(getDialog(), DialogInterface.BUTTON_NEGATIVE); }); builder.setView(view); return builder.create(); } @Override public void onCancel(@NonNull DialogInterface dialog) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("确定要退出吗?") .setPositiveButton("确定", (dialog1, which) -> { getActivity().finish(); }) .setNegativeButton("取消", null) .create() .show(); } } ``` 这个类包含了一个构造方法,用于传入标题、提示内容、确定按钮和取消按钮的点击监听器。在 onCreateDialog 方法,首先使用 AlertDialog.Builder 创建一个对话框实例,然后使用 LayoutInflater 加载自定义布局 custom_dialog.xml,并将标题、提示内容、确定按钮和取消按钮的点击监听器设置进去。最后返回对话框实例。 在 onCancel 方法,当用户按下回退键时,弹出一个提示对话框,询问用户是否退出应用。如果用户点击确定按钮,则调用 getActivity().finish() 关闭当前 Activity。 最后,在需要弹出自定义对话框的地方,调用 CustomDialog 的静态方法 newInstance 创建一个实例,并调用 show 方法显示对话框,如下所示: ``` CustomDialog.newInstance("提示", "确定要退出应用吗?", null, null) .show(getSupportFragmentManager(), "CustomDialog"); ``` 这个示例没有为确定按钮和取消按钮设置监听器,因此点击这两个按钮时不会有任何响应。如果需要在点击确定按钮或取消按钮时进行一些操作,只需要在创建 CustomDialog 实例时传入相应的监听器即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值