当前位置: 首页 > news >正文

自定义DialogAlert对话框并实现对话框的复用

一、演示效果
这里写图片描述
二、项目布局

这里写图片描述

三、项目代码

IAlertDialogButtonListener.java

package com.example.dialogalertbyself;

/**
 * 自定义Listener
 * 
 * 用于实现Dialog的复用
 * 
 * @author xuliugen
 * 
 */
public interface IAlertDialogButtonListener {

    /**
     * 实现对话框的点击事件
     */
    public void onDialogOkButtonClick();

    public void onDialogCancleButtonClick();

}

MainActivity.java

package com.example.dialogalertbyself;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
 * 对于不同的按钮实现对DialogAlert的复用
 * 
 * @author xuliugen
 * 
 */
public class MainActivity extends Activity {

    private Button button1;
    private Button button2;
    private Button button3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = (Button) this.findViewById(R.id.button1);
        button2 = (Button) this.findViewById(R.id.button2);
        button3 = (Button) this.findViewById(R.id.button3);

        /*
         * 设置三个按钮的点击事件
         */
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 将第一个按钮弹出对话框的信息,message和IAlertDialogButtonListener
                Util.showDialog(MainActivity.this, "我是第一个按钮",
                        firstButtonListener);
            }
        });
        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Util.showDialog(MainActivity.this, "我是第二个按钮",
                        secondButtonListener);
            }
        });
        button3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Util.showDialog(MainActivity.this, "我是第三个按钮",
                        thirdButtonListener);
            }
        });

    }

    private IAlertDialogButtonListener firstButtonListener = new IAlertDialogButtonListener() {

        @Override
        public void onDialogOkButtonClick() {
            Toast.makeText(MainActivity.this, "第一个按钮--你点的是确认",
                    Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onDialogCancleButtonClick() {
            Toast.makeText(MainActivity.this, "第一个按钮--你点的是取消",
                    Toast.LENGTH_SHORT).show();
        }

    };

    private IAlertDialogButtonListener secondButtonListener = new IAlertDialogButtonListener() {

        @Override
        public void onDialogOkButtonClick() {
            Toast.makeText(MainActivity.this, "第二个按钮--你点的是确认",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDialogCancleButtonClick() {
            Toast.makeText(MainActivity.this, "第二个按钮--你点的是取消",
                    Toast.LENGTH_SHORT).show();
        }

    };

    private IAlertDialogButtonListener thirdButtonListener = new IAlertDialogButtonListener() {

        @Override
        public void onDialogOkButtonClick() {
            Toast.makeText(MainActivity.this, "第三个按钮--你点的是确认",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDialogCancleButtonClick() {
            Toast.makeText(MainActivity.this, "第三个按钮--你点的是取消",
                    Toast.LENGTH_SHORT).show();
        }

    };

}

Util.java

package com.example.dialogalertbyself;

import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;

public class Util {

    private static AlertDialog mAlertDialog;

    /**
     * 
     * 显示用户自定义的对话框
     * 
     * @param context
     * @param message
     * @param listener
     */
    public static void showDialog(Context context, String message,
            final IAlertDialogButtonListener listener) {

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View dialogView = inflater.inflate(R.layout.dialog_view, null);

        // 在创建Dialog的时候设置样式为透明的,并且要求api最低为11
        AlertDialog.Builder builder = new AlertDialog.Builder(context,
                R.style.Theme_Transparent);

        // ok按钮
        ImageButton btnOkButton = (ImageButton) dialogView
                .findViewById(R.id.btn_dialog_ok);
        // Cancel按钮
        ImageButton btnCancelButton = (ImageButton) dialogView
                .findViewById(R.id.btn_dialog_cancel);
        // 信息
        TextView txtMessageView = (TextView) dialogView
                .findViewById(R.id.text_dialog_message);

        // 设置文字内容
        txtMessageView.setText(message);

        // 设置btnOkButton的事件
        btnOkButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mAlertDialog != null) { // 关闭对话框:判断对话框是否为空
                    mAlertDialog.cancel();
                }

                if (listener != null) {
                    // 设置回调,OnClick()就是IAlertDialogButtonListener接口中的方法
                    listener.onDialogOkButtonClick();// 执行接口的确定方法
                }
            }
        });

        // 设置btnCancelButton的事件
        btnCancelButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (mAlertDialog != null) {
                    mAlertDialog.cancel();
                }

                if (listener != null) {
                    // 设置回调,OnClick()就是IAlertDialogButtonListener接口中的方法
                    listener.onDialogCancleButtonClick();// 执行接口的取消方法
                }
            }
        });

        // 为dialog设置View
        builder.setView(dialogView);

        // 创建对话
        mAlertDialog = builder.create();

        // 显示对话框
        mAlertDialog.show();

    }
}

cancel_button_icon.xml

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

    <item android:drawable="@drawable/buytip_cancel_sel" android:state_pressed="true"/>
    <item android:drawable="@drawable/buytip_cancel"/>

</selector>

ok_button_icon.xml

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

    <item android:drawable="@drawable/buytip_ok_sel" android:state_pressed="true"/>
    <item android:drawable="@drawable/buytip_ok"/>

</selector>

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="25dp"
        android:background="@drawable/bg"
        android:text="第二个按钮" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button2"
        android:layout_below="@+id/button2"
        android:layout_marginTop="22dp"
        android:background="@drawable/bg"
        android:text="第三个按钮" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/bg"
        android:text="第一个按钮" />

</RelativeLayout>

dialog_view.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:background="@drawable/buytip_bg"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提示"
        android:textColor="@color/black"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/text_dialog_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="40dp"
        android:layout_marginTop="40dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="TextView"
        android:textColor="@color/black"
        android:textSize="18sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal" >

        <ImageButton
            android:id="@+id/btn_dialog_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:background="@drawable/cancel_button_icon" />

        <ImageButton
            android:id="@+id/btn_dialog_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/ok_button_icon" />
    </LinearLayout>

</LinearLayout>

项目源码地址:
http://yunpan.cn/cJ4JLACNyqpkT 访问密码 683e

相关文章:

  • webservice作用(优,缺点;作用)
  • 如何修改Eclipse的背景颜色
  • 编程的智慧
  • 如何修改eclipse快捷键的组合方式
  • 在Application_Error获取Asp.Net未处理异常信息
  • Bmob的使用案例
  • easyui
  • Eclipse导入library的时候报:Found 2 versions of android-support-v4.jar in the dependency list
  • tomcat为什么无法关闭
  • Android项目编译的时候出现:Caused by: java.lang.ClassNotFoundException: com.example.aaa.MainActivity
  • dsadsa
  • 在一个千万级的数据库查寻中,如何提高查询效率?
  • SQLHelp帮助类
  • meta标签的作用详解
  • Web Worker
  • 《深入 React 技术栈》
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android系统模拟器绘制实现概述
  • co.js - 让异步代码同步化
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • js面向对象
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React的组件模式
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 大主子表关联的性能优化方法
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 如何选择开源的机器学习框架?
  • 使用 @font-face
  • 网页视频流m3u8/ts视频下载
  • 异常机制详解
  • 再次简单明了总结flex布局,一看就懂...
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 阿里云ACE认证之理解CDN技术
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​用户画像从0到100的构建思路
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #AngularJS#$sce.trustAsResourceUrl
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (pojstep1.1.2)2654(直叙式模拟)
  • (八)Flask之app.route装饰器函数的参数
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (算法)N皇后问题
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • **PHP分步表单提交思路(分页表单提交)
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .libPaths()设置包加载目录
  • .Net - 类的介绍
  • .Net Remoting常用部署结构
  • .net 简单实现MD5
  • .Net各种迷惑命名解释
  • .net中的Queue和Stack