Android仿IOS自定义AlertDialog提示框

本文介绍的仿IOS对话框的实现,先来看一下效果图

具体代码如下:

public class AlertDialog {
 private Context context;
 private Dialog dialog;
 private LinearLayout lLayout_bg;
 private TextView txt_title;
 private TextView txt_msg;
 private Button btn_neg;
 private Button btn_pos;
 private ImageView img_line;
 private Display display;
 private boolean showTitle = false;
 private boolean showMsg = false;
 private boolean showPosBtn = false;
 private boolean showNegBtn = false;

 public AlertDialog(Context context) {
  this.context = context;
  WindowManager windowManager = (WindowManager) context
    .getSystemService(Context.WINDOW_SERVICE);
  display = windowManager.getDefaultDisplay();
 }

 public AlertDialog builder() {
  View view = LayoutInflater.from(context).inflate(
    R.layout.view_alertdialog, null);

  lLayout_bg = (LinearLayout) view.findViewById(R.id.lLayout_bg);
  txt_title = (TextView) view.findViewById(R.id.txt_title);
  txt_title.setVisibility(View.GONE);
  txt_msg = (TextView) view.findViewById(R.id.txt_msg);
  txt_msg.setVisibility(View.GONE);
  btn_neg = (Button) view.findViewById(R.id.btn_neg);
  btn_neg.setVisibility(View.GONE);
  btn_pos = (Button) view.findViewById(R.id.btn_pos);
  btn_pos.setVisibility(View.GONE);
  img_line = (ImageView) view.findViewById(R.id.img_line);
  img_line.setVisibility(View.GONE);

  dialog = new Dialog(context, R.style.AlertDialogStyle);
  dialog.setContentView(view);

  lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams((int) (display
    .getWidth() * 0.80), LayoutParams.WRAP_CONTENT));

  return this;
 }

 public AlertDialog setTitle(String title) {
  showTitle = true;
  if ("".equals(title)) {
   txt_title.setText("标题");
  } else {
   txt_title.setText(title);
  }
  return this;
 }

 public AlertDialog setMsg(String msg) {
  showMsg = true;
  if ("".equals(msg)) {
   txt_msg.setText("内容");
  } else {
   txt_msg.setText(msg);
  }
  return this;
 }

 public AlertDialog setCancelable(boolean cancel) {
  dialog.setCancelable(cancel);
  return this;
 }

 public AlertDialog setPositiveButton(String text,
   final OnClickListener listener) {
  showPosBtn = true;
  if ("".equals(text)) {
   btn_pos.setText("确定");
  } else {
   btn_pos.setText(text);
  }
  btn_pos.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    listener.onClick(v);
    dialog.dismiss();
   }
  });
  return this;
 }

 public AlertDialog setNegativeButton(String text,
   final OnClickListener listener) {
  showNegBtn = true;
  if ("".equals(text)) {
   btn_neg.setText("取消");
  } else {
   btn_neg.setText(text);
  }
  btn_neg.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    listener.onClick(v);
    dialog.dismiss();
   }
  });
  return this;
 }

 private void setLayout() {
  if (!showTitle && !showMsg) {
   txt_title.setText("提示");
   txt_title.setVisibility(View.VISIBLE);
  }

  if (showTitle) {
   txt_title.setVisibility(View.VISIBLE);
  }

  if (showMsg) {
   txt_msg.setVisibility(View.VISIBLE);
  }

  if (!showPosBtn && !showNegBtn) {
   btn_pos.setText("确定");
   btn_pos.setVisibility(View.VISIBLE);
//   btn_pos.setBackgroundResource(R.drawable.alertdialog_single_selector);
   btn_pos.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     dialog.dismiss();
    }
   });
  }

  if (showPosBtn && showNegBtn) {
   btn_pos.setVisibility(View.VISIBLE);
//   btn_pos.setBackgroundResource(R.drawable.alertdialog_right_selector);
   btn_neg.setVisibility(View.VISIBLE);
//   btn_neg.setBackgroundResource(R.drawable.alertdialog_left_selector);
   img_line.setVisibility(View.VISIBLE);
  }

  if (showPosBtn && !showNegBtn) {
   btn_pos.setVisibility(View.VISIBLE);
//   btn_pos.setBackgroundResource(R.drawable.alertdialog_single_selector);
  }

  if (!showPosBtn && showNegBtn) {
   btn_neg.setVisibility(View.VISIBLE);
//   btn_neg.setBackgroundResource(R.drawable.alertdialog_single_selector);
  }
 }

 public void show() {
  setLayout();
  dialog.show();
 }
}

布局文件view_alertdialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/lLayout_bg"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/alert_bg"
 android:orientation="vertical" >

 <TextView
  android:id="@+id/txt_title"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft="15dp"
  android:layout_marginRight="15dp"
  android:layout_marginTop="15dp"
  android:gravity="center"
  android:textColor="@color/black"
  android:textSize="18sp"
  android:text="提示"
  android:textStyle="bold" />

 <TextView
  android:id="@+id/txt_msg"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft="15dp"
  android:layout_marginRight="15dp"
  android:layout_marginTop="32dp"
  android:gravity="center"
  android:text="提示信息"
  android:textColor="@color/black"
  android:textSize="16sp" />

 <ImageView
  android:layout_width="match_parent"
  android:layout_height="0.5dp"
  android:layout_marginTop="25dp"
  android:background="@color/alertdialog_line" />

 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal" >

  <Button
   android:id="@+id/btn_neg"
   android:layout_width="wrap_content"
   android:layout_height="43dp"
   android:layout_weight="1"
   android:background="@drawable/alertdialog_left_selector"
   android:gravity="center"
   android:textColor="@color/actionsheet_blue"
   android:textSize="16sp"
   />

  <ImageView
   android:id="@+id/img_line"
   android:layout_width="0.5dp"
   android:layout_height="43dp"
   android:background="@color/alertdialog_line" />

  <Button
   android:id="@+id/btn_pos"
   android:layout_width="wrap_content"
   android:layout_height="43dp"
   android:layout_weight="1"
   android:background="@drawable/alertdialog_right_selector"
   android:gravity="center"
   android:textColor="@color/actionsheet_blue"
   android:textSize="16sp"
   android:textStyle="bold"
   />
 </LinearLayout>

</LinearLayout>

alertdialog_left_selector.xml

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

 <item android:drawable="@drawable/alert_btn_left_pressed" android:state_pressed="true"/>
 <item android:drawable="@drawable/trans_bg"/>

</selector>

alertdialog_right_selector.xml

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

 <item android:drawable="@drawable/alert_btn_right_pressed" android:state_pressed="true"/>
 <item android:drawable="@drawable/trans_bg"/>

</selector>

alertdialog_single_selector.xml

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

 <item android:drawable="@drawable/alert_btn_single_pressed" android:state_pressed="true"/>
 <item android:drawable="@drawable/trans_bg"/>

</selector>
<style name="AlertDialogStyle" parent="@android:style/Theme.Dialog">
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:windowContentOverlay">@null</item>
  <item name="android:windowIsFloating">true</item>
  <item name="android:windowFrame">@null</item>
  <item name="android:backgroundDimEnabled">true</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowIsTranslucent">true</item>
 </style>

用到的.9图片

调用方式:

  new AlertDialog(this).builder().setMsg(msg)
  .setPositiveButton("确定", new OnClickListener() {
   @Override
   public void onClick(View v) {

   }
  }).setNegativeButton("取消", new OnClickListener() {

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
   }
  }).show();

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

(0)

相关推荐

  • Android自定义dialog可选择展示年月日时间选择栏

    自定义dialog package com.poptest; import android.app.DatePickerDialog; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.DatePicker; //dialog类 public class YearPickerDialog extends DatePickerD

  • Android Dialog中软键盘的显示与隐藏的示例

    1.写在前面 本篇的主要内容是关于在Dialog中软键盘的显示与隐藏问题,需求是在Dialog中有一个密码输入框,弹出Dialog显示软键盘,关闭Dialog隐藏软键盘. 嗯,是不是有点简单,不过在实现的过程中还是遇到了一些问题,在试过了网上大部分的方法之后,最终找到了一个还不错的方法,分享给大家. 看下效果图: 2.实现过程 先说说最开始的实现方法: // 显示Dialog dialog.show(); // 显示软键盘 SoftInputUtils.showSoftInput(activit

  • Android实现底部对话框BottomDialog弹出实例代码

    最近项目上需要实现一个底部对话框,要实现这样的功能其实很简单,先看代码: private void show1() { Dialog bottomDialog = new Dialog(this, R.style.BottomDialog); View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_content_normal, null); bottomDialog.setContentView(contentV

  • Android 自定义AlertDialog对话框样式

    实际的项目开发当中,经常需要根据实际的需求来自定义AlertDialog.最近在开发一个WIFI连接的功能,点击WIFI需要弹出自定义密码输入框.在此权当记录 效果图 点击首页的Button即跳出对话框,显示WIFI信息(TextView),密码输入框(EditText),取消和连接按钮(Button) 实现 根据自己实际的需求,为AlertDialog创建一个布局,在此我需要定义一个如图所示的WIFI密码输入框,故在 res/layout 目录下建立一个 dialog_layout.xml 文

  • Android实现自定义圆角对话框Dialog的示例代码

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角显示 2.考虑到提示文本字数不确定,在不影响美观的情况下,需要在一行内显示提示的文字信息 3.设置对话框的宽和高 技术储备: 1.安卓开发_使用AlertDialog实现对话框    知道AlertDialog有setView(view) ,Dialog 有ContentView(view) 方法. 2.An

  • Android仿支付宝微信支付密码界面弹窗封装dialog

    一,功能效果 二,实现过程 1,先写xml文件:dialog_keyboard.xml 注意事项 (1),密码部分用的是一个线性布局中6个TextView,并设置android:inputType="numberPassword",外框是用的一个有stroke属性的shape, (2),1-9数字是用的recycleview ,每个item的底部和右边有1dp的黑线,填充后形成分割线. (3),recycleview 要设置属性  android:overScrollMode=&quo

  • Android中ProgressDialog的dismiss()与cancel()方法的区别

    progressDialog, 它有两个方法dialog.cancel() 和 dialog.dimiss() 1. public void cancel () Since: API Level 1 Cancel the dialog. This is essentially the same as calling dismiss(), but it will also call your DialogInterface.OnCancelListener (if registered). 2.p

  • Android 常用log 关键字

    记录下常用的log关键字 1.windowmanager接收到全局按键 WindowManager: interceptKeyTq keycode=26 interactive=false keyguardActive=true policyFlags=2000000 WindowManager: interceptKeyTq keycode=26 interactive=false keyguardActive=true policyFlags=2000000 down =true // 按下

  • Android仿IOS自定义AlertDialog提示框

    本文介绍的仿IOS对话框的实现,先来看一下效果图 具体代码如下: public class AlertDialog { private Context context; private Dialog dialog; private LinearLayout lLayout_bg; private TextView txt_title; private TextView txt_msg; private Button btn_neg; private Button btn_pos; private

  • iOS自定义alertView提示框实例分享

    本文实例为大家分享iOS自定义alertView提示框,先上图,弹框的背景色,按钮背景色,提示的消息的字体颜色都可以改变 利用单例实现丰富的自定义接口 // // PBAlertController.h // PBAlertDemo // // Created by 裴波波 on 16/4/20. // Copyright © 2016年 裴波波. All rights reserved. // #import <UIKit/UIKit.h> typedef void(^PBBlock)();

  • Android使用Toast显示消息提示框

    在前面的实例中,已经应用过Toast类来显示一个简单的提示框了.这次将对Toast进行详细介绍.Toast类用于在屏幕中显示一个消息提示框,该消息提示框没有任何控制按钮,并且不会获得焦点,经过一段时间后自动消失.通常用于显示一些快速提示信息,应用范围非常广泛. 使用Toast来显示消息提示框非常简单,只需要一下三个步骤: (1).创建一个Toast对象.通常有两种方法:一种是使用构造方式进行创建: Toast toast=new Toast(this); 另一种是调用Toast类的makeTex

  • Android仿IOS UIAlertView对话框

    本文实例为大家分享了Android仿IOS UIAlertView对话框的具体代码,供大家参考,具体内容如下 显示效果: 我在参考链接中看到了作者的仿的qq提示框,但是在使用的时候并不是很方面,有一些不足,于是我参照Android系统AlertDialog,使用参考链接中的布局文件和style文件,用自己的方法自定义了一下这个仿IOS上面UIAlertView的效果,这样的话让我们可以想使用系统AlertDialog一样使用我自定义的CustomDialog. CustomDialog使用代码:

  • Android仿ios加载loading菊花图效果

    项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loading,一般用的比较多的是仿照ios 的菊花加载loading 图,当然一些条件下还会涉及到加载成功/ 失败情况的显示,还有显示文字.   使用ProgressBar 来加载动画转圈,这里使用drawable文件 定义转圈动画, indeterminateDrawable 属性进行加载. <?xml version="1.0" encoding="utf-8"?> &

  • Android仿IOS上拉下拉弹性效果的实例代码

    用过iphone的朋友相信都体验过页面上拉下拉有一个弹性的效果,使用起来用户体验很好:Android并没有给我们封装这样一个效果,我们来看下在Android里如何实现这个效果.先看效果,感觉有些时候还是蛮实用的. 思路:其实原理很简单,实现一个自定义的Scrollview方法(来自网上大神),然后在布局文件中使用自定义方法Scrollview就可以了. 代码: 自定义View,继承自Scrollview.MyReboundScrollView类 package com.wj.myrebounds

  • android 仿ios数字密码解锁界面的实例

    如下所示: 每个Android开发人员都知道,现在android的解锁最常用的就是九宫格解锁,ios的解锁常用的是数字密码解锁.而我们在开发工程中,很多时候,都需要android和ios进行结合.有的时候我们就需要把我们的解锁界面弄成像ios一样的数字键盘. 这里我就实现了一个仿照ios的数字密码解锁界面.在这里我采用了两种方式来实现,第一种就是使用自定义控件的形式,第二种就是使用我们的布局来实现的.这里我就着重讲一下使用自定义控件形式实现的思路.至于使用布局文件实现的方式,我就不进行具体的讲解

  • Android仿IOS回弹效果 支持任何控件

    本文实例为大家分享了Android仿IOS回弹效果的具体代码,供大家参考,具体内容如下 效果图: 导入依赖: dependencies { // ... compile 'me.everything:overscroll-decor-android:1.0.4' } RecyclerView 支持线性布局和网格布局管理器(即所有原生Android布局).可以轻松适应支持自定义布局管理器. RecyclerView recyclerView = (RecyclerView) findViewByI

  • iOS中 LGLAlertView 提示框的实例代码

    使用与iOS8 以后,只是把系统的UIAlertController进行了封装,省的每次用的时候要写很多的代码.封装后只需要一句代码即可 , deome 地址 :https://github.com/liguoliangiOS/LGLAlertView.git 上代码LGLAlertView.h: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, LGLAlert

  • Android仿微信进度弹出框的实现方法

    MainActivity: package com.ruru.dialogproject; import android.app.Activity; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity implements Runnable { LoadingDialog dialog; @Override protected void onCreate(Bu

随机推荐