热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android自定义AlertDialog对话框

这篇文章主要为大家详细介绍了android自定义AlertDialog的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前面一篇文章https://www.jb51.net/article/103036.htm介绍了alertDialog的四种简单使用,但是有些时候为了让整个app的风格统一,或者说前面的四种形式不符合项目中的需求,这个时候就需要我们自定义alertDialog了。直接上代码

CustomAlertDialog:

import android.app.Dialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
 
/** 
 * Created by yk on 2017/1/17. 
 */ 
 
public class CustomAlertDialog extends Dialog implements View.OnClickListener { 
 
 
 
 public interface OnDialogButtonClickListener { 
  /** 
   * 点击按钮的回调方法 
   * 
   * @param requestCode 
   * @param isPositive 
   */ 
  void onDialogButtonClick(int requestCode, boolean isPositive); 
 } 
 
 private Context context; 
 private String title; 
 private String message; 
 private String strPositive; 
 private String strNegative; 
 private int requestCode; 
 private OnDialogButtonClickListener listener; 
 
 public CustomAlertDialog(Context context, String title, String message, int requestCode, 
        OnDialogButtonClickListener listener) { 
  super(context, R.style.MyDialog); 
  this.cOntext=context; 
  this.title=title; 
  this.message=message; 
  this.requestCode=requestCode; 
  this.listener=listener; 
 
 } 
 
 private TextView tvTitle; 
 private TextView tvMessage; 
 private Button btnPositive; 
 private Button btnNegative; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.alert_dialog); 
//  setCancelable(false);//设置点击对话框外部和按返回键都不可以取消 
//  setCanceledOnTouchOutside(false);//设置点击对话框外部是否可以取消,默认是不可以取消(但是点返回键可以取消) 
 
  tvTitle = (TextView) findViewById(R.id.tvAlertDialogTitle); 
  tvMessage = (TextView) findViewById(R.id.tvAlertDialogMessage); 
  btnPositive = (Button) findViewById(R.id.btnAlertDialogPositive); 
  btnNegative = (Button) findViewById(R.id.btnAlertDialogNegative); 
 
  tvTitle.setText(title); 
  tvMessage.setText(message); 
 
  btnPositive.setOnClickListener(this); 
  btnNegative.setOnClickListener(this); 
 } 
 
 @Override 
 public void onClick(View view) { 
  switch (view.getId()){ 
   case R.id.btnAlertDialogPositive: 
    //确定按钮 
    listener.onDialogButtonClick(requestCode,true); 
    break; 
   case R.id.btnAlertDialogNegative: 
    //取消按钮 
    listener.onDialogButtonClick(requestCode,false); 
    break; 
  } 
  dismiss(); 
 } 
} 

 MainActivity:

package com.example.yk.dialogtest; 
 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 
 
public class CustomDialogActivity extends AppCompatActivity implements CustomAlertDialog.OnDialogButtonClickListener { 
 
 private static final int REQUEST_CODE_FIRST = 1; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_custom_dialog); 
  CustomAlertDialog alertDialog=new CustomAlertDialog(this,"title","message",REQUEST_CODE_FIRST,this); 
  alertDialog.show(); 
 
 } 
 
 @Override 
 public void onDialogButtonClick(int requestCode, boolean isPositive) { 
  if(requestCode==REQUEST_CODE_FIRST && isPositive){ 
   Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show(); 
  } else if (requestCode==REQUEST_CODE_FIRST && !isPositive) { 
   Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show(); 
  } 
 } 
} 

实现的效果:

如果我们需要自定义“确定”和“取消”按钮所显示的字,可以再写一个构造方法,比如:

public AlertDialog(Context context, String title, String message,String strPositive, String strNegative, int requestCode, OnDialogButtonClickListener listener) { 
  super(context, R.style.MyDialog); 
 
  this.cOntext= context; 
  this.title = title; 
  this.message = message; 
  this.strPositive = strPositive; 
  this.strNegative = strNegative; 
  this.requestCode = requestCode; 
  this.listener = listener;  
 } 
if(!TextUtils.isEmpty(strPositive)){ 
   btnPositive.setText(strPositive); 
  } 
  if(!TextUtils.isEmpty(strNegative)){ 
   btnNegative.setText(strNegative); 
  } 

实现的效果:


源码(包括上篇文章中四种简单alertDialog的使用):http://xiazai.jb51.net/201701/yuanma/androidAlertDialog(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • 精选Unity开源项目:UniRx实现响应式编程
    本文介绍了Unity中的响应式编程框架——UniRx,探讨了其在解决异步编程难题中的应用及优势。 ... [详细]
  • ECharts 基础使用指南
    本文档提供了一个简单的 ECharts 使用示例,帮助初学者快速了解如何在网页中集成和使用 ECharts 创建图表。更多详细信息请参阅官方文档:https://www.echartsjs.com/zh/tutorial.html#5%20分钟上手%20ECharts ... [详细]
  • 目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ... [详细]
  • Android 自定义指南针视图实现
    本文介绍了如何在Android应用中自定义绘制指南针视图,包括方位角的计算、不同方向的颜色区分以及视图随手势移动的功能实现。 ... [详细]
  • 本文探讨了在支付项目开发中使用SS5 Socket Server实现内部网络访问外部网络的技术方案。详细介绍了SS5的安装、配置及性能测试过程,旨在为面临相同需求的技术人员提供参考。 ... [详细]
  • 本文详细介绍了如何从SVN中获取项目,并在本地环境中进行有效的构建和开发,包括具体的步骤和配置方法。 ... [详细]
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 解决Ant编译时出现的非法字符错误
    在进行Java项目的Ant构建过程中,有时会遇到由平台差异引发的编译错误。本文将详细探讨一种常见的错误——'error: illegal character'及其解决方案。 ... [详细]
  • 本文详细介绍如何在iOS项目中集成和使用KTVHTTPCache音视频缓存插件,包括Podfile配置、初始化设置及实际应用中的使用方法。 ... [详细]
  • 本文详细探讨了函数与对象方法的主要区别,包括它们的定义方式、调用规则以及在面向对象编程语言中的应用特点。 ... [详细]
  • 深入解析 Jetpack LiveData 的工作原理
    本文详细介绍了 Jetpack 库中的 LiveData 组件,这是一种能够感知生命周期并可被观察的数据持有类。LiveData 支持存储任何类型的数据,并通常与 ViewModel 结合使用,以确保数据在配置变更时保持一致。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • NFC OMA 接口访问优化
    本文探讨了NFC设备中OMA接口的访问方式,特别是针对IC制造商提供的NFC swp-sim访问与NFC服务提供商对eSe(嵌入式安全元件)访问的不同处理方法。文中提出了几种解决方案以解决由此产生的双SmartcardService运行问题。 ... [详细]
  • 深入探讨PHP中的输出缓冲技术(Output Buffering)
    本文深入解析了PHP中输出缓冲(Output Buffering)的原理及其在Web开发中的应用,特别是如何通过输出缓冲技术有效管理HTTP头部信息,提高代码的灵活性与健壮性。 ... [详细]
author-avatar
mobiledu2502872825
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有