Dialog的简单使用

本文深入解析对话框的使用方法,包括界面设计、Activity 实现及动画效果配置。通过简单的实例,展示了如何创建具有动画效果的对话框,并提供了基本的交互操作示例。

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

今天做一个小功能,Dialog的使用。一般来说,我们和用户交互所使用的类有这几个:Activity、Window、Dialog、Toast,可见Dialog的重用性,所以这是必须掌握的。先看下效果:




额,好像界面比较丑...,不过使用方法才是重点,下面我们就来实现一下。

首先是界面:

<?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:background="#ff0000"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginTop="10dp">

        <Button
            android:id="@+id/bt_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_margin="5dp"
            android:background="#00ff00"
            android:text="取消"
            android:textColor="#ffffff" />

        <Button
            android:id="@+id/bt_sure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_margin="5dp"
            android:background="#00ff00"
            android:text="确定"
            android:textColor="#ffffff" />
    </RelativeLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_margin="20dp"
        android:background="#ffffff"
        android:gravity="center"
        android:text="我是弹出框"
        android:textSize="16sp" />
</LinearLayout>

然后是Activity:

public class MainActivity extends Activity implements View.OnClickListener {
    //弹框dialog
    private Dialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt_click).setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        if (v == null) {
            return;
        }
        switch (v.getId()) {
            case R.id.bt_click: //点击
                showDialog();
                break;
            case R.id.bt_sure:  // 确定
                clickSureButton();
                break;
            case R.id.bt_cancel:    //删除
                clickCancelButton();
                break;
        }
    }

    /**
     * 显示弹框
     */
    private void showDialog() {
        dialog = new Dialog(this, R.style.clickDialogStyle);  //设置动画样式
        dialog.show();
        WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); //设置布局和对齐方式
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.BOTTOM;
        dialog.getWindow().setAttributes(params);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.layout_show_dialog);
        dialog.setCanceledOnTouchOutside(true);

        //点击监听
        dialog.findViewById(R.id.bt_sure).setOnClickListener(this);
        dialog.findViewById(R.id.bt_cancel).setOnClickListener(this);

    }

    /**
     * 弹框确定操作
     */
    private void clickSureButton() {
        Toast.makeText(this, "我点击了确定", Toast.LENGTH_SHORT).show();
        dialog.cancel();
    }

    /**
     *  弹框取消操作
     */
    private void clickCancelButton() {
        Toast.makeText(this, "我点击了取消", Toast.LENGTH_SHORT).show();
        dialog.cancel();
    }
}

这里面可能就是弹出时的动画会比较麻烦,不过多写几次就好了,style:

<style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:backgroundDimAmount">0.4</item>
    </style>

    <style name="clickDialogStyle" parent="dialog">
        <item name="android:windowAnimationStyle">@style/showDialogAnimationStyle</item>
    </style>

    <style name="showDialogAnimationStyle" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/bottom_in</item>
        <item name="android:windowExitAnimation">@anim/bottom_out</item>
    </style>

最后是我们的移动动画效果:

bottom_in:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="100%"
    android:toYDelta="0%" >
</translate>

同理,bottom_out:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromYDelta="0%"
    android:toYDelta="100%" >
</translate>

ok啦,简单吧!当然,这只是比较简单的实现,在项目中我们可能会遇到比较复杂的,比如仿ios的滑轮效果,双级联动乃至三级联动的时间选择器等等,不过原理都是一样的。Tanks!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值