Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...

PS:渐渐明白,在实验室呆三年都不如在企业呆一年...

学习内容:

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

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

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

/*
 * 
 *  CopyRight@ By Darker 2015-10-31
 *  多功能菜单...
 * 
 * */
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) {}

  弹出框基本都是这些模式...源码的实现非常的简单...原理都是对那些基本函数的一些封装...剩下的几个就不粘贴了..万变不离其宗...

 最后贴上自己写的源代码:http://files.cnblogs.com/files/RGogoing/AndBaseAnotherActivity.zip

原文地址:https://www.cnblogs.com/RGogoing/p/4925847.html