Android自定义弹出框dialog效果

项目要用到弹出框,还要和苹果的样式一样(Android真是没地位),所以就自己定义了一个,不是很像(主要是没图),但是也还可以。

废话不多说了,直接上代码

1、先看布局文件

<?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:padding="20dp"
  android:orientation="vertical">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@drawable/custom_dialog_background"
    android:orientation="vertical">

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

      <TextView
        android:id="@+id/tv_title_custom_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="提醒"
        android:textColor="#000"
        android:textSize="18dp" />

      <TextView
        android:id="@+id/tv_message_custom_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="您确定要取消订单吗" />
    </LinearLayout>

    <View
      android:layout_width="match_parent"
      android:layout_height="0.5dp"
      android:layout_marginTop="20dp"
      android:background="#dfdfdf" />

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

      <Button
        android:id="@+id/btn_negative_custom_dialog"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/transparent"
        android:text="取消"
        android:textColor="@android:color/holo_blue_dark" />

      <View
        android:layout_width="0.5dp"
        android:layout_height="match_parent"
        android:background="#dfdfdf" />

      <Button
        android:id="@+id/btn_positive_custom_dialog"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/transparent"
        android:text="确定"
        android:textColor="@android:color/holo_blue_dark" />
    </LinearLayout>
  </LinearLayout>
</LinearLayout>

2、集成dialog重写了一下

package newair.com.storelibrary.ui.custom.widget;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import newair.com.storelibrary.R;

/**
 * Created by ouhimehime on 16/4/22.
 * ---------自定义提示框-----------
 */
public class CustomDialog extends Dialog {

  public CustomDialog(Context context) {
    super(context);
  }

  public CustomDialog(Context context, int themeResId) {
    super(context, themeResId);
  }

  protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
    super(context, cancelable, cancelListener);
  }

  public static class Builder {
    private Context context;
    private String title; //标题
    private String message;//提示消息
    private String negative_text;//消极的
    private String positive_text;//积极的
    private DialogInterface.OnClickListener negativeListener;//消极的监听
    private DialogInterface.OnClickListener positiveListener;//积极的监听

    public Builder(Context context) {
      this.context = context;
    }

    public Builder setTitle(String title) {
      if (title == null) {
        this.title = "提醒";
      }
      this.title = title;
      return this;
    }

    public Builder setMessage(String message) {
      if (message == null) {
        this.message = "您没有填写提示信息哦";
      }
      this.message = message;
      return this;
    }

    public Builder setNegativeButton(String negative_text, DialogInterface.OnClickListener negativeListener) {
      if (negative_text == null) {
        this.negative_text = "取消";
      }
      this.negative_text = negative_text;
      this.negativeListener = negativeListener;

      return this;
    }

    public Builder setPositionButton(String positive_text, DialogInterface.OnClickListener positiveListener) {
      if (positive_text == null) {
        this.positive_text = "确定";
      }
      this.positive_text = positive_text;
      this.positiveListener = positiveListener;

      return this;
    }

    private TextView tv_title_custom_dialog; //标题
    private TextView tv_message_custom_dialog;//提示信息
    private Button btn_negative_custom_dialog;//消极
    private Button btn_positive_custom_dialog;//积极

    public CustomDialog create() {
      final CustomDialog dialog = new CustomDialog(context);
      View view = LayoutInflater.from(context).inflate(R.layout.dialog_custom_style_layout, null);
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);//加上这一句,取消原来的标题栏,没加这句之前,发现在三星的手机上会有一条蓝色的线
//      dialog.addContentView(view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
      dialog.setContentView(view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
      tv_title_custom_dialog = (TextView) view.findViewById(R.id.tv_title_custom_dialog);
      tv_message_custom_dialog = (TextView) view.findViewById(R.id.tv_message_custom_dialog);
      btn_negative_custom_dialog = (Button) view.findViewById(R.id.btn_negative_custom_dialog);
      btn_positive_custom_dialog = (Button) view.findViewById(R.id.btn_positive_custom_dialog);
      tv_title_custom_dialog.setText(title);
      tv_message_custom_dialog.setText(message);
      btn_negative_custom_dialog.setText(negative_text);
      btn_positive_custom_dialog.setText(positive_text);
      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
      btn_negative_custom_dialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          negativeListener.onClick(dialog, Dialog.BUTTON_NEGATIVE);
        }
      });
      btn_positive_custom_dialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          positiveListener.onClick(dialog, Dialog.BUTTON_POSITIVE);
        }
      });
      return dialog;
    }
  }
}

3、使用起来和系统的用法一样

CustomDialog.Builder builder = new CustomDialog.Builder(this);
        builder.setTitle("购物提醒")
            .setMessage("我是提示信息,大家好好")
            .setNegativeButton("再看看", new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(GoodsListActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show();
              }
            })
            .setPositionButton("确定", new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(GoodsListActivity.this, "点击了确定按钮", Toast.LENGTH_SHORT).show();
              }
            })
            .create()
            .show();

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

(0)

相关推荐

  • 高仿IOS的Android弹出框

    先看一下效果图,不过这是网上的图片. 效果不错,就借此拿来与大伙分享分享. github源码地址:https://github.com/saiwu-bigkoo/Android-AlertView. 1.怎么用:添加依赖. compile 'com.bigkoo:alertview:1.0.3' 2.实例demo(大家可以根据需要来选择自己需要的框框). package com.example.my.androidalertview; import android.app.Activity; i

  • Android使用Dialog风格弹出框的Activity

    在Android中经常会遇到需要使用Dialog风格弹出框的activity,首先我们可能会首先想到的是在XML布局文件中设置android:layout_height="wrap_content"属性,让activity的高度自适应,显然这还不行,我们还需要为其DialogActivity设置自定义一个样式 <style name="dialogstyle"> <!--设置dialog的背景--> <item name="a

  • android中ProgressDialog与ProgressBar的使用详解

    一 .ProgressDialogProgressDialog与ProgressBar在UI中动态显示一个加载图标显示程序运行状态.ProgressDialog是继承自Android.app.ProgressDialog所设计的互动对话窗口,使用时,必须新建ProgressDialog对象,在运行时会弹出"对话框"作为提醒,此时应用程序后台失去焦点(即此时无法对UI组件进行操作),直到进程结束后,才会将控制权交给应用程序,如果在Activity当中不希望后台失焦,又希望提示User有某

  • Android 仿微信朋友圈点赞和评论弹出框功能

    贡献/下载源码:https://github.com/mmlovesyy/PopupWindowDemo 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多"按钮,弹出对话框: 点击评论,弹出输入框,添加评论并在页面中实时显示: 微信朋友圈点赞和评论功能 2. 实际效果 本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现

  • Android 自定义弹出框实现代码

    废话不多说了,直接给大家上关键代码了. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定义弹出框 -(void)showAlertView:(NSString *)strTipText { UIView *showView=[[UIView alloc]init]; [sho

  • android控件封装 自己封装的dialog控件

    自定义dialog肯定是用的很多了但是感觉每次做都是很乱 单纯完成任务而已,现在封装了一下 以后用到直接copy 先上图: 主activity 复制代码 代码如下: package com.su.testcustomdialog; import com.su.testcustomdialog.MyDialog.Dialogcallback; import android.app.Activity; import android.os.Bundle; import android.view.Vie

  • Android实现可输入数据的弹出框

    之前一篇文章,介绍了如何定义从屏幕底部弹出PopupWindow即<Android Animation实战之屏幕底部弹出PopupWindow>,写完之后,突然想起之前写过自定义内容显示的弹出框,就随手写了两个实例,分享出来: 第一种实现方式:继承Dialog  1.1 线定义弹出框要显示的内容:create_user_dialog.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

  • Android 多种简单的弹出框样式设置代码

    简介 这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明.同时也可自定义弹出框. 项目地址:http://www.github.com/jjdxmashl/jjdxm_dialogui 特性 1.使用链式开发代码简洁明了 2.所有的弹出框样式都在DialogUIUtils这个类中完成,方便查阅方法 3.可以自定义弹出框字体样式 4.简单的类似加载框的样式可以支持两种主题更改默认白色和灰色 截图 demo下载 demo apk下载 D

  • Android编程实现仿QQ发表说说,上传照片及弹出框效果【附demo源码下载】

    本文实例讲述了Android编程实现仿QQ发表说说,上传照片及弹出框效果.分享给大家供大家参考,具体如下: 代码很简单,主要就是几个动画而已,图标什么的就随便找了几个,效果图:   动画说明: 1.点击右上角按钮,菜单从顶部下拉弹出,同时背景变暗; 2.再次点击右上角按钮,点击返回键,或者点击空白区域(也就是变暗的部分),菜单向上收回; 3.点击菜单上的按钮响应事件,同时菜单收回(效果同2) 重要说明:动画结束后必须clearAnimation,否则隐藏状态的view依然能响应点击事件 主体代码

  • Android中自定义PopupWindow实现弹出框并带有动画效果

    使用PopupWindow来实现弹出框,并且带有动画效果 首先自定义PopupWindow public class LostPopupWindow extends PopupWindow { public Lost lost; public void onLost(Lost lost){ this.lost = lost; } private View conentView; public View getConentView() { return conentView; } public L

随机推荐