android自定义AlertDialog对话框

 更新时间:2017年01月17日 11:40:43   作者:爱dy  
这篇文章主要为大家详细介绍了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

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

相关文章

  • android命令行模拟输入事件(文字、按键、触摸等)

    android命令行模拟输入事件(文字、按键、触摸等)

    这篇文章主要给大家介绍了关于android命令行模拟输入事件,例如文字、按键、触摸等的相关资料,文中通过示例代码介绍的非常详细,对各位android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Mac OS下为Android Studio编译FFmpeg解码库的详细教程

    Mac OS下为Android Studio编译FFmpeg解码库的详细教程

    这篇文章主要介绍了Mac OS下为Android Studio编译FFmpeg解码库的详细教程,包括NDK的配置和Android Studio的配置两个部分的内容,需要的朋友可以参考下
    2016-01-01
  • Android编程实现基于局域网udp广播自动建立socket连接的方法

    Android编程实现基于局域网udp广播自动建立socket连接的方法

    这篇文章主要介绍了Android编程实现基于局域网udp广播自动建立socket连接的方法,涉及Android使用udp广播实现socket通讯的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android kotlin 跳转手机热点开关页面和判断热点是否打开(亲测可用)

    Android kotlin 跳转手机热点开关页面和判断热点是否打开(亲测可用)

    跳转手机热点的页面肯定是用intent,重点是action不知道是什么,网上最常见的就是Settings.ACTION_WIFI_SETTINGS 跳转wifi设置页面,本文介绍Android kotlin 跳转手机热点开关页面和判断热点是否打开,感兴趣的朋友一起看看吧
    2023-08-08
  • Kotlin launch原理全面分析

    Kotlin launch原理全面分析

    在Android开发中,launch是我们经常用的,今天来看看它是什么原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • AndroidStudio中重载方法@Override的使用详解

    AndroidStudio中重载方法@Override的使用详解

    这篇文章主要介绍了AndroidStudio中重载方法@Override的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Android导航栏功能项的显示与屏蔽介绍

    Android导航栏功能项的显示与屏蔽介绍

    大家好,本篇文章主要讲的是Android导航栏功能项的显示与屏蔽介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 简单好用的PHP分页类

    简单好用的PHP分页类

    这篇文章主要为大家分享了一款简单好用的PHP分页类page.class.php,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android触屏事件和MotionEvent详解

    Android触屏事件和MotionEvent详解

    这篇文章主要介绍了Android触屏事件和MotionEvent详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 基于Android studio3.6的JNI教程之helloworld思路详解

    基于Android studio3.6的JNI教程之helloworld思路详解

    这篇文章主要介绍了基于Android studio3.6的JNI教程之helloworld,本文通过图文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论