Android中仿IOS提示框的实现方法

前言

在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。

自定义Dialog

我们知道Android中最常用的对话框就是Dialog及其派生类。这次我们通过组合的方式来实现一个类似IOS对话框的效果。我们先来看一下布局效果,这个相信大家都能弄出来,在这里我就贴一下最后的效果图(注意:对话框的边缘是圆角的)。

效果图如下:

我们看到,这个和IOS的对话框已经非常相似了,后面我们需要做的就是将其作为一个组件封装起来,实现AlertDialog那样的调用方式提供给调用者使用。下面我们来看一下整个的封装过程。

1、组合使用Dialog进行对象的构建

/**
  * 创建BaseDialog实例
  * @return
  */
 public BaseDialog builder(){
  LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  mDialog = new Dialog(mContext, R.style.Dialog);
  //设置dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失
  mDialog.setCanceledOnTouchOutside(false);
  View layout = inflater.inflate(R.layout.dialog_normal_layout, null);
  mDialog.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
         ViewGroup.LayoutParams.WRAP_CONTENT));
  //设置Dialog中展示的msg
  mMessage=(TextView) layout.findViewById(R.id.txtMsg);
  //设置确认按钮的处理事件
  mPositiveBtnText=(TextView) layout.findViewById(R.id.txtSubmit);
  mPositiveBtnText.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    if (mPositiveBtnClickListener != null) {
     mPositiveBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_POSITIVE);
    }
   }
  });
  mNegativeBtnText=(TextView) layout.findViewById(R.id.txtCancle);
  mNegativeBtnText.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    if(mNegativeBtnClickListener!=null) {
     mNegativeBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_NEGATIVE);
    }
   }
  });
  mDialog.setContentView(layout);
  return this;
 }

在这段代码中,我们看到第7行代码生成一个Dialog对象,然后通过解析样式文件(XML)通过setContentView方法添加到生成的Dialog对象中。下面的代码我们看到通过解析XML样式文件,来设置Dialog显示的文本、取消、确认按钮触发的事件等操作。重点在最后一行代码return this而不是mDialog。因为通过返回this对象我们可以使用“链式调用”来不断的进行调用设置等操作,类似Android中的AlertDialog使用方式。

2、自定义Dialog的一些设置

/**
  * 设置Msg
  * 支持Resource设置
  * @param message
  */
 public BaseDialog setMessage(int message){
  mMessage.setText(mContext.getText(message).toString());
  return this;
 }
 /**
  * 设置Msg
  * @param message
  */
 public BaseDialog setMessage(String message){
  mMessage.setText(message);
  return this;
 }

 public BaseDialog setPositiveButton(int positiveBtnText,DialogInterface.OnClickListener listener) {
  mPositiveBtnText.setText(mContext.getText(positiveBtnText));
  mPositiveBtnClickListener = listener;
  return this;
 }
 public BaseDialog setPositiveButton(String positiveBtnText,DialogInterface.OnClickListener listener){
  mPositiveBtnText.setText(positiveBtnText);
  mPositiveBtnClickListener=listener;
  return this;
 }

 public BaseDialog setNegativeButton(int negativeBtnText,DialogInterface.OnClickListener listener){
  mNegativeBtnText.setText(mContext.getText(negativeBtnText));
  mNegativeBtnClickListener=listener;
  return this;
 }

 public BaseDialog setNegativeButton(String negativeBtnText,DialogInterface.OnClickListener listener){
  mNegativeBtnText.setText(negativeBtnText);
  mNegativeBtnClickListener=listener;
  return this;
 }

 public void show(){
  mDialog.show();
 }

我们看到我们提供了几个比较常用的函数。特别是setPositiveButton等方法,我们直接将事件处理对象传递进来了。下面我们来看下自定义控件的字段定义。代码如下:

public BaseDialog(Context context){
  mContext=context;
 }
 private Dialog mDialog;
 protected Context mContext;
 protected TextView mMessage;
 protected TextView mPositiveBtnText;
 protected TextView mNegativeBtnText;
 protected DialogInterface.OnClickListener mPositiveBtnClickListener;
 protected DialogInterface.OnClickListener mNegativeBtnClickListener;

我们看到整个自定义Dialog的核心就是mDialog对象,通过组合的方式我们在每一个BaseDialog对象内部都会有一个Dialog对象,BaseDailog对象只是提供了一些外围的显示功能。核心的例如隐藏、显示、弹出效果等方式依赖于嵌入的mDialog对象的。

下面我们来看一下自定义Dialog的调用方式。代码如下:

/**
 * 弹出电话确认按钮
 */
new BaseDialog(getActivity())
  .builder()
  .setMessage("15895991339")
  .setPositiveButton("确认", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:15895991339"));
    startActivity(intent);
    dialog.dismiss();
   }
  }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
   }
  }).show();

我们看到,调用方式和AlertDialog的使用方式很相似。

以上这篇Android中仿IOS提示框的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(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仿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

  • Android仿IOS底部弹出对话框

    在Android开发过程中,常常会因为感觉Android自带的Dialog的样式很丑,项目开发过程中会影响整体效果,会使得开发过程很是忧伤....(话唠时间结束!) 本文我将介绍一款开源的Dialog仿IOS底部弹窗效果IOS_Dialog_Library的使用.我将通过几个简单的示例介绍IOS_Dialog_Library.zip的使用方法. 1.IOS_Dialog_Library是开源的Dialog框架,所以首先你得下载IOS_Dialog_Library.zip包,并作为Library引

  • Android中仿IOS提示框的实现方法

    前言 在Android开发中,我们有时需要实现类似IOS的对话框.今天我就来总结下,如何通过自定义的开发来实现类似的功能. 自定义Dialog 我们知道Android中最常用的对话框就是Dialog及其派生类.这次我们通过组合的方式来实现一个类似IOS对话框的效果.我们先来看一下布局效果,这个相信大家都能弄出来,在这里我就贴一下最后的效果图(注意:对话框的边缘是圆角的). 效果图如下: 我们看到,这个和IOS的对话框已经非常相似了,后面我们需要做的就是将其作为一个组件封装起来,实现AlertDi

  • android开发仿ios的UIScrollView实例代码

    今天重新装了编译器,结果崩无极限,真是日了狗了了.刚刚才知道问题在哪边. 好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多就是UIScrollView的把.如果不对,请指证.具体什么效果呢,我刚才拿朋友的iphone手机看了下,iphone的设置界面,第一个列表往下拉可以继续滚,上拉同理.不过android好像没有自带的这种情况. 我把这种效果称为滚无极限的scollview. 下面就来上源码: 首先,最最最重要的就是判断当前视图是否为空,你空视图滚不滚好像没啥区别,除了an

  • Android超实用的Toast提示框优化分享

    前言 相信每位Android开发者都用过Toast,都知道是弹出消息的.类似于js里面的alert,C#里面的MesageBox.当然android里面也有dialog,dialog是有焦点的,可与用户交互.而toast是没有焦点的,时间到了自动消失,不能回应用户的交互,下面就跟大家分享下Android中Toast提示框的优化方法. 先看下源码: public class Toast { public static final int LENGTH_SHORT = 0; public stati

  • vue项目中仿element-ui弹框效果的实例代码

    最近要写个弹框,发现element-ui弹框样式还可以,就copy下来改吧改吧.也不分步骤详细介绍了直接上代码. 在组件目录中新建文件夹message 我把message目录里的东西给大家贴出来 message文件夹 src文件夹 index.js import Message from './src/main.js'; export default Message; mian.js import Vue from 'vue'; import Main from './main.vue'; le

  • Android自定义控件仿ios下拉回弹效果

    网上有很多类似的文章,大多数还是继承listview来实现(主要是listview.addHeaderView()和listview.addFooterView在listview的首尾添加view,也可以用上面的两个listview自带函数实现下拉刷新的功能,在这里不准备介绍,有兴趣的朋友可以去自己试试). 在本文主要是给android的线性布局(相对布局.帧布局)加上下拉或者上拉回弹得效果.在ios中我们经常能看到,在一个页面中即使是只有一个控件,这一个控件只占整个页面的1/10不到,但是当我

  • Android实现仿iOS菊花加载圈动画效果

    常见的实现方式 切图,做旋转动画 自定义View,绘制效果 gif图 1.切图会增加体积,但相对简单,不过在换肤的场景下,会使用不同颜色,需要准备多张图,不够灵活. 2.由于自定义的好处,不同颜色只需要提供自定义属性,换肤时切换属性设置即可,比较灵活. 3.gif图普遍比较大,而且加载gif没有原生支持,需要引入第三方库,而且消耗内存比较大,不推荐. 效果图: 完整代码 自定义属性: <?xml version="1.0" encoding="utf-8"?&

  • Android中实现在矩形框中输入文字显示剩余字数的功能

    虽然这两个功能都比较简单,但是在实际app开发中真的很常见,特别是显示字数或剩余字数这个功能 如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个background,在drawable中创建一个shap.xml样式文件 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/

  • Android中Spinner(下拉框)控件的使用详解

    android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧. Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类得一个子类. 1.效果图 2.创建页面文件(main.xml) <Spinner android:id="@+id/spinner1" and

  • Android中实现iOS中的毛玻璃效果

    为了实现毛玻璃效果,我们需要一组compute kernels(.rs文件中编写),及一组用于控制renderScript相关的Javaapi(.rs文件自动生成为Java类). 由于compute kernels的编写需要一定的学习成本,从JELLY_BEAN_MR1开始,Androied内置了一些compute kernels用于常用的操作,其中就包括了Gaussian blur. 下面,通过实操来讲解一下RenderScript来实现高斯模糊,最终实现效果(讲文字背景进行模糊处理): 实现

  • Android开发仿IOS滑动开关实现代码

    Android开发仿IOS滑动开关实现代码 Android与iOS相比,ios好多控件都是自带的,而android需要使用自定义来实现.今天说的是ios的滑动开关,我层看到好多博客都是通过自定义ToggleButton实现的.这里我通过自定义view来实现他的效果. 首先在onsizechange里把2个半圆和一个矩形绘制出来. width = w; height = h; left = top = 0; right = width; bottom = height * 0.8f; cx = (

随机推荐