Android AndBase框架内部封装实现进度框、Toast框、弹出框、确认框(二)

本文是针对AndBase框架学习整理的第二篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习。

使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框

AndBase中AbActivity封装好了许多方法提供我们去使用,使得在使用的时候更加的方便,只需要传递相关参数即可..省去了我们自己使用基础的函数进行构造...

就好比进度框,Toast框,弹出框,确认框...这些基本的东西都在AndBase的AbActivity封装好了...我们只需要传递参数调用其中内部的方法就可以完成这些视图的创建...无论是进度条的调用,还是Toast框,还是弹出框,确认框(确认框和弹出框基本相似),只是确认框比弹出框多了一些相关控件而已,弹出框一般用于直接弹出一段文本信息,而去确认框则还需要添加相关的按钮...总之调用的方式也就非常的简单...

/*
 *
 * 多功能菜单...
 *
 * */
package com.example.andbaseanotheractivity;

import com.ab.activity.AbActivity;
import com.ab.global.AbConstant;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

import android.widget.Button;

public class MainActivity extends AbActivity implements View.OnClickListener {

 private Button but[]=new Button[6];
 private View view;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setAbContentView(R.layout.activity_main);

 InitFindID();
 }

 public void InitFindID(){
 for(int i=0;i<but.length;i++){
  String resID="but_"+i;
  but[i]=(Button) findViewById(this.getResources().getIdentifier(resID, "id", "com.example.andbaseanotheractivity")); //寻找ID的一种比较好的方式..这种方式的使用前提是ID的定义一定要有一定的规则...
  but[i].setOnClickListener(this);
 }
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 view=mInflater.inflate(R.layout.demo_text, null);
 switch(v.getId()){
 case R.id.but_0:
  showProgressDialog(); //直接弹出圆形进度框...
  break;
 case R.id.but_1:
  showToast("Toast文本框"); //Toast文本框...
  break;
 case R.id.but_2:
  showDialog(AbConstant.DIALOGTOP, view); //弹出框..传递参数为显示的位置以及显示的视图...这里表示在最上方弹出...
  break;
 case R.id.but_3:
  showDialog(AbConstant.DIALOGCENTER, view); //
  break;
 case R.id.but_4:
  showDialog(AbConstant.DIALOGBOTTOM, view);
  break;
 case R.id.but_5:
   //可以看到确认框也是调用showDialog方法..只是传递的参数不相同..AbActivity也针对这几种不同的弹出框定义了不同的方法...
  showDialog("标题", "描述", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   showToast("点击确认");
  }
  });
  break;
 }
 }

}

这里我们可以看到,只需要调用相关的方法,传递相关的参数就能够完成这些基本View的创建..从而使得我们的操作更加的方便...

以前的Toast信息弹出框调用的方式:

Toast.makeText(getApplicationContext(),"需要想要显示的信息",Toast.LENGTH).show();
 现在的方式就是这样:

showToast("需要显示的信息");

这样直接就可以完成Toast信息框的显示..对于这样的简单方式的封装,可能我们不以为然..但是如果是更多的代码量呢?就拿我们的确认弹出框来说吧...如果是在以往的Activity中书写一个确认弹出框,我们需要手动去进行重写...下面就是基于Activity来手写的一个确认框...

AlertDialog.Builder builder=new Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("确认退出");
builder.setPositiveButton("确认", new OnClickListener() { //添加确认按钮...

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   dialog.dismiss(); /提示框消失..
  }
  });
builder.setNegativeButton("取消", new OnClickListener() { //添加取消按钮..

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   dialog.dismiss();
  }
  });

使用AndBase框架通过调用函数的方式,这样就使得这个过程就非常的简单..我们只需要传递相关的参数调用方法就可以了...这个函数的调用和上面的书写方式所带来的效果是相同的,并且这里我们不需要再设置dialog.dismiss();只要点击了按钮,那么弹出框就会消失...这里的OnClick方法是后续弹出框消失后需要执行的操作...相比而言,使用框架还是简化了代码量

showDialog("提示", "确认退出", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   showToast("点击确认");
  }
  });

其实这些简单的View还是非常的简单的...虽然看起来代码量减少的并不是非常的多,但是如果对于更加复杂的操作...框架中优化好的方法还是非常的好用的...即减少了代码的冗余度,而且还实现了更多的功能...

还是看一下源码的实现过程吧...

Toast框的源码实现过程...我们可以看到,框架中的方法把原生态的方法进行了封装,我们只需要传递相关参数就可以直接使用Toast框...其实源码内部还有showToastInThread()的源码..通过开启一个新的线程

/**
 * 描述:Toast提示文本.
 * @param text 文本
 */
 public void showToast(String text) {
 Toast.makeText(this,""+text, Toast.LENGTH_SHORT).show(); //这里已经把这个方法封装好了...我们只需要传递需要显示的文本就行了...
 }

 /**
 * 描述:Toast提示文本.
 * @param resId 文本的资源ID
 */
 public void showToast(int resId) {
 Toast.makeText(this,""+this.getResources().getText(resId), Toast.LENGTH_SHORT).show(); //这种方法则是通过resID来设置需要显示的文本...
 }

进度框的源码实现过程...源码非常的简单...我们在使用一个进度条的时候只需要调用这两种方法就可以了...

/**
 * 描述:显示进度框.
 */
 public void showProgressDialog() {
 showProgressDialog(null); //没有显示进度的进度框..
 }

 /**
 * 描述:显示进度框.
 * @param message the message
 */
 public void showProgressDialog(String message) {
 // 创建一个显示进度的Dialog
 if(!AbStrUtil.isEmpty(message)){
  mProgressMessage = message; //设置进度框显示的信息...
 }
 if (mProgressDialog == null) {
  mProgressDialog = new ProgressDialog(this);
  // 设置点击屏幕Dialog不消失
  mProgressDialog.setCanceledOnTouchOutside(false);
 }
 mProgressDialog.setMessage(mProgressMessage);//设置进度框显示的消息..
 showDialog(AbConstant.DIALOGPROGRESS);
 }

弹出框的源码我就不进行粘贴了,由于源码写的确实有点多...这里就只粘贴一下封装的方法...

这个方法显示的对话框是一个信息弹出框,没有按钮,只是进行信息的提示...id的作用设置弹出框显示的位置...View表示需要显示的视图...这样就创建了一个弹出框在指定的位置进行显示...

public void showDialog(int id,View view) {} 
  上面方法的执行过程中,会调用setDialogLayoutParams()函数去设置相关属性,设置弹出框布局的参数,也就是弹出框如何在屏幕上更好的显示的一个设置...

这是源码的调用过程,看起来并不是很难理解...

private void setDialogLayoutParams(Dialog dialog,int dialogPadding,int gravity){
 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //设置没有标题..
 Window window = dialog.getWindow(); //获取窗口...
 WindowManager.LayoutParams lp = window.getAttributes();//获取窗口属性...
 //此处可以设置dialog显示的位置
 window.setGravity(gravity); //设置窗口的对其方式...
 //设置宽度
 lp.width = diaplayWidth-dialogPadding;
 lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
 //背景透明
 //lp.screenBrightness = 0.2f;
 lp.alpha = 0.8f;
 lp.dimAmount = 0f;
 window.setAttributes(lp);
 // 添加动画
 window.setWindowAnimations(android.R.style.Animation_Dialog);
 // 设置点击屏幕Dialog不消失
 dialog.setCanceledOnTouchOutside(false);

 }

这个方法的弹出框是一个带有按钮的确认框,title和msg表示对话框的标题内容和提示内容...以及点击确认按钮时发生的监听事件的传递...

public void showDialog(String title,String msg,DialogInterface.OnClickListener mOkOnClickListener) {} 
  这个方法的弹出框和上面的唯一区别就是,弹出框的内容不是指定的字符串,而是一个我们自定义的一个视图..

public AlertDialog showDialog(String title,View view,DialogInterface.OnClickListener mOkOnClickListener) {}
  弹出框基本都是这些模式...源码的实现非常的简单...原理都是对那些基本函数的一些封装...剩下的几个就不粘贴了..万变不离其宗。

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

(0)

相关推荐

  • 超简单实现Android自定义Toast示例(附源码)

    Bamboy的自定义Toast,(以下称作"BToast") 特点在于使用简单, 并且自带两种样式: 1)普通的文字样式: 2)带图标样式. 其中图标有√和×两种图标. BToast还有另外一个特点就是: 系统自带Toast采用的是队列的方式,当前Toast消失后,下一个Toast才能显示出来: 而BToast会把当前Toast顶掉, 直接显示最新的Toast. 那么,简单三步,我们现在就开始自定义一下吧! (一).Layout: 要自定义Toast, 首先我们需要一个XML布局. 但

  • Android实现Toast提示框图文并存的方法

    本文实例讲述了Android实现Toast提示框图文并存的方法.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.text.util.Linkify; import android.view.Gravity; import android.view.View; import android.view.

  • Android Toast提示封装实例代码

    Android Toast提示封装 Android中经常用到Toast提示,项目中很多Toast提示,写很长的一行,简单的封装一下,将Toast方法提出来,很方便使用: 实例代码: /** * 提示字符串 * short Toast * @param context * @param text * by Hankkin at:2015-10-07 21:14:43 */ public static void showToast(Context context, String text) { To

  • Android 更改 Toast 的默认位置方法

    Android中Toast的默认位置在屏幕靠近底部的位置,这个默认位置有时候并不合适.比如页面上内容较少时,内容一般集中在屏幕上半部分,用户的注意力也集中在屏幕上半部分,默认位置的Toast用户可能没有注意到.还有可能是默认位置的Toast被用户的手挡住了.实践中感觉将Toast显示在屏幕的中部或中上部会比较好.如何修改Toast的默认位置呢?下面做一个简单的例子来演示一下. 先上截图: 布局文件activity_toast.xml代码如下: <?xml version="1.0"

  • Android编程经典代码集锦(复制,粘贴,浏览器调用,Toast显示,自定义Dialog等)

    本文实例总结了Android编程经典代码段.分享给大家供大家参考,具体如下: 1. 复制,粘贴 clip = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clip.setText("copy"); // 复制 clip.getText(); // 粘贴 2.调用浏览器 核心代码如下: Intent intent = new Intent(); intent.setAction("android.

  • Android 5.0以上Toast不显示的解决方法

    原因分析 用户使用android 5.0以上的系统在安装APP时,将消息通知的权限关闭掉了.实际上用户本意只是想关闭Notification,但是Toast的show方法中有调用INotificationManager这个类,而这个类在用户关闭消息通知权限的同时被禁用了,所以我们的吐司无法显示. Toast.show() 效果图 自定义Toast(上)与Toast(下)比对 问题解决 既然系统不允许我们调用Toast,那么我们就自立门户--自己写一个Toast出来.我们总体的思路是:在Activ

  • Android Service中使用Toast无法正常显示问题的解决方法

    本文实例讲述了Android Service中使用Toast无法正常显示问题的解决方法.分享给大家供大家参考,具体如下: 在做Service简单练习时,在Service中的OnCreate.OnStart.OnDestroy三个方法中都像在Activity中同样的方法调用了Toast.makeText,并在Acitivy中通过两个按钮来调用该服务的onStart和onDestroy方法: DemoService代码如下: @Override public void onCreate() { su

  • Android AndBase框架内部封装实现进度框、Toast框、弹出框、确认框(二)

    本文是针对AndBase框架学习整理的第二篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框 AndBase中AbActivity封装好了许多方法提供我们去使用,使得在使用的时候更加的方便,只需要传递相关参数即可..省去了我们自己使用基础的函数进行构造... 就好比进度框,Toast框,弹出框,确认框...这些基本的东西都在AndBase的AbActivity封装好了...我们只需要传递参数调用其中

  • Android AndBase框架使用封装好的函数完成Http请求(三)

    本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求... AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼

  • Android AndBase框架实现多功能标题栏(一)

    本文是针对AndBase框架学习整理的第一篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 1.使用AndBase实现多功能标题栏 AndBase框架内部提供了许多的方式能够使我们去设置一个更好的标题栏,进行动态的改变,而并非静态的将标题栏界面写死...能够使得标题栏更加的美观...总体就是动态的获取布局然后通过对布局的操作来自定义一个良好的标题栏... 使用AndBase框架的时候我们的主函数就不是继承于Acticity了,而是继承于AbActivity,万变不离其宗还是A

  • Android超详细讲解弹出多选框的实现

    目录 程序代码功能:点击一个按钮弹出一个多选框 在activity_main.xml布局一个button控件,大小,颜色,位置,背景可自行调节,以被用来在MainActivity.java调用其id来实现点击弹出多选框!在btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {}}大括号内放入点击btn1时间要发生的内容,因为是弹出多选框,所以用来Alter.Bu

  • Android 8.0如何完美适配全局dialog悬浮窗弹出

    前言 最近项目targetSdkVersion升级到了26,出现很多问题趟了很多坑,其中就包括本篇的需要解决的问题:全局dialog 不显示. 出现场景 有时候我们需要在App中弹dialog,但是却不知道依附的是哪个Activity,这个时候通常会启动一个service来依附,显示一个全局的dialog. Android 6.0出现的悬浮窗权限 为什么从6.0说起? 在Android6.0之后,使用悬浮窗功能需要申请开启悬浮窗权限,在API23以下版本编译,悬浮窗权限关闭的,但是没有权限限制,

  • JQuery Mobile 弹出式登录框的实现方法

    <a href="#login" data-rel="popup" data-position-to="window" data-role="button">Login</a> <div data-role="popup" id="login" data-theme="a"> <form style="padding

  • JS点击图片弹出文件选择框并覆盖原图功能的实现代码

    简单说下原理,把显示的图片的<img>标签 和上传文件的 <input> 标签放在同一个div下,设置<img>的大小和<input>的大小一样,<input> 设置透明度为0,用定位和设置优先级把input浮动在<img>上方,这样点击图片就能选择上传图片,选择完图片后获取图片地址,替换掉原来的默认图片就能实现覆盖原图功能. js代码: <script type="text/javascript" src=

  • JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)

    本文实例讲述了JS+CSS实现鼠标经过弹出一个DIV框效果.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

  • JS点击某个图标或按钮弹出文件选择框的实现代码

    下面一段代码是基于js实现的点击某个图标或按钮弹出文件选择框的核心代码,代码比较简单,需要的朋友参考下 具体代码如下所示: <HTML> <head> <script type="text/javascript" src="script/jquery-1.6.2.min.js"></script> <script type='text/javascript'> function selectFile(){

  • 设置点击文本框或图片弹出日历控件的实现代码

    <input id="startDate" value="" readonly="true" type="text" style="cursor: pointer" class="user_datepicker "> <input class="canlderImg" data-tag="start" type="ima

随机推荐