Android的BaseActivity的

写过一些小Android应用的开发者在创建框架时,为了提高代码复用率而设计一些基类和接口,同时也在一定程度上降低耦合度。那么在设计BaseActivity的时就需要其足够的抽象(通用),以便减少后面的重复代码。
 其中一个常用的就是Activity的提示视图,一般用Toast,当然现在Snackbar也很方便了。设想一下show一个提示消息框,一定会需要哪些组件:
 那么一定是:
 (1) Context;
 (2) Message(String);
 后者作为发出消息的内容是必须作为参数的,但是后者如果作为参数,假设设计为showMessage(Context context,String message)这样,那么在每次使用时传入Snackbar依附的父视图的Context对象,但是这样不是最方便的:
 比如:程序架构逐渐复杂的时候,很多的逻辑代码都会脱离Activity,但是Context是没法脱离的仍然需要使用。这时候就会有些不方便了。当然也有解决办法:
 如下:

//修改Application的name属性,和自己定义的Application类路径相同

  .....
  .....
//MyApplication.java文件
package com.test.team.global;

import android.app.Application;
import android.content.Context;

/**
 * 项目名称:QRScandoor
 * 创建人:Created by zhiyuan.
 * 创建时间:Created on 2016/9/9 17:01
 * 修改备注:
 */
public class MyApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }
    /**
     * 得到应用程序级别的Context
     * @return
     */
    public static Context getContext() {
        return context;
    }
}

但是这只是获取到的Application级别的Context,Service、Activity、Application类型的Context还是有差别的,具体的请查看:这里写链接内容
 这里提供一个更方便的办法解决这个问题:

/**
     * 展示一个SnackBar
     */
    public void showSnackBarWithAction(String message) {
        //去掉虚拟按键
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏虚拟按键栏
                | View.SYSTEM_UI_FLAG_IMMERSIVE //防止点击屏幕时,隐藏虚拟按键栏又弹了出来
        );
        final Snackbar snackbar = Snackbar.make(getWindow().getDecorView(), message, Snackbar.LENGTH_INDEFINITE);
        snackbar.setAction("知道了", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbar.dismiss();
                //隐藏SnackBar时记得恢复隐藏虚拟按键栏,不然屏幕底部会多出一块空白布局出来,和难看
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
            }
        }).show();
    }

你可能感兴趣的:(Android基础)