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

 更新时间:2016年03月30日 16:28:03   作者:Darker  
这篇文章主要介绍了Android AndBase框架使用AbActivity内部封装实现进度框、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) {}
  弹出框基本都是这些模式...源码的实现非常的简单...原理都是对那些基本函数的一些封装...剩下的几个就不粘贴了..万变不离其宗。

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

相关文章

  • Android创建简单发送和接收短信应用

    Android创建简单发送和接收短信应用

    收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持。今天我们开始自己创建一个简单的发送和接收短信的应用,需要的朋友可以参考下
    2016-04-04
  • Android利用软引用和弱引用避免OOM的方法

    Android利用软引用和弱引用避免OOM的方法

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。本文给大家介绍Android利用软引用和弱引用避免OOM,需要的朋友一起学习吧
    2016-04-04
  • Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解

    Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解

    RxJava作为一种响应式编程框架,是目前编程界网红,可谓是家喻户晓,其简洁的编码风格、易用易读的链式方法调用、强大的异步支持等使得RxJava被广泛使用。
    2017-01-01
  • Android自定义View旋转圆形图片

    Android自定义View旋转圆形图片

    这篇文章主要为大家详细介绍了Android自定义View旋转圆形图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Android WebView调用本地相册的方法

    Android WebView调用本地相册的方法

    这篇文章主要为大家详细介绍了Android WebView调用本地相册的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 解决Android BitmapFactory的基本使用问题

    解决Android BitmapFactory的基本使用问题

    很多朋友给小编反馈使用方法BitmapFactory.decodeFile转化Bitmap时报错,究竟是什么原因导致错误问题呢?今天通过本文给大家介绍下解决Android BitmapFactory的基本使用问题,感兴趣的朋友一起看看吧
    2021-10-10
  • Android Dialog 对话框详解及示例代码

    Android Dialog 对话框详解及示例代码

    本文主要介绍Android Dialog,这里详细介绍Android Dialog的基本使用方法,并提供了示例代码和实现效果图,有需要的小伙伴可以参考下
    2016-08-08
  • Android 自定义SeekBar动态改变硬件音量大小实现和音量键的同步(推荐)

    Android 自定义SeekBar动态改变硬件音量大小实现和音量键的同步(推荐)

    这篇文章主要介绍了 Android 自定义SeekBar动态改变硬件音量大小实现和音量键的同步效果,整段代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Android AlertDialog六种创建方式案例详解

    Android AlertDialog六种创建方式案例详解

    这篇文章主要介绍了Android AlertDialog六种创建方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android 10 启动之servicemanager源码解析

    Android 10 启动之servicemanager源码解析

    这篇文章主要为大家介绍了Android 10 启动之servicemanager源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论