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

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

  1. Android 学习笔记之AndBase框架学习(六) PullToRefrech 下拉刷新的实现

    PS:Struggle for a better future 学习内容: 1.PullToRefrech下拉刷新的实现...   不得不说AndBase这个开源框架确实是非常的强大..把大部分的东西 ...

  2. Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...

    PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...

  3. Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..

    PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现 ...

  4. Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏

    PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBas ...

  5. Android 学习笔记之AndBase框架学习(七) SlidingMenu滑动菜单的实现

    PS:努力的往前飞..再累也无所谓.. 学习内容: 1.使用SlidingMenu实现滑动菜单..   SlidingMenu滑动菜单..滑动菜单在绝大多数app中也是存在的..非常的实用..Gith ...

  6. Android 学习笔记之AndBase框架学习(四) 使用封装好的函数实现单,多线程任务

    PS:Force Is Meaningless Without Skill 学习内容: 1.使用AndBase实现单线程任务... 2.使用AndBase实现多线程任务...   AndBase内部封 ...

  7. Hadoop学习笔记—18.Sqoop框架学习

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

  8. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是 ...

  9. Hadoop学习笔记—15.HBase框架学习(基础实践篇)

    一.HBase的安装配置 1.1 伪分布模式安装 伪分布模式安装即在一台计算机上部署HBase的各个角色,HMaster.HRegionServer以及ZooKeeper都在一台计算机上来模拟. 首先 ...

随机推荐

  1. Redis & Python/Django 简单用户登陆

    一.Redis key相关操作: 1.del key [key..] 删除一个或多个key,如果不存在则忽略 2.keys pattern keys模式匹配,符合glob风格通配符,glob风格的通配 ...

  2. 求二叉树的深度和宽度[Java]

    这个是常见的对二叉树的操作.总结一下: 设节点的数据结构,如下: class TreeNode { char val; TreeNode left = null; TreeNode right = n ...

  3. ARM中C和汇编混合编程及示例(转)

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  4. IT技术团队行而有效的管理之道

    在博客园看到的一份读书笔记,如果日后有机会去管理一个技术团队,那么下面这些经验可能会让你更好地实施工作. IT技术团队员工的特点 高学历,知识密集型,技术立身. 人际关系简单,摩擦大多数由技术产生,相 ...

  5. javascript 中的getter,setter

    1.什么是getter,什么是setter? getter 是一种获得属性值的方法,setter是一种设置属性值的方法. 2.怎么定义? 有2种办法: 在对象初始化的时候定义 在对象定义后的时候定义 ...

  6. C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用

    概述      最近几天一直在关注WinFrom方面的文章主要还是园子里伍华聪的博客,在看看我们自己写的项目差不忍赌啊,有想着提炼一下项目的公共部分,公共部分有分为 界面,类库两方面,今天主要是把界面 ...

  7. 获取枚举类型的描述description

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  8. 私服 Nexus 的配置

    一.概述 1.概要 现在的项目基本都是用Maven来管理工程,这样一来在公司内容搭建一个私服就非常有必要了,这样一来可以管理公司内部用的JAR包,也可以管理第三方的各种JAR来,以免每次都要从外网的仓 ...

  9. (笔记)Linux内核学习(四)之系统调用

    一 用户空间和内核空间 Linux内核将这4G字节虚拟地址空间的空间分为两部分: l  将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”. l  ...

  10. NPOIHelper.cs (NPOI 2.1.1)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...