Android 实现基类:Java抽象类的简单使用

为了减少重复代码和冗余逻辑,引用基类。其他Activity只需继承该基类即可

直接上代码。代码较少,比较简单,一些代码是参考别人的,其他功能按自己需求添加

public abstract class BaseActivity extends AppCompatActivity {

    private Toast toast;

    /**
     * 如果安卓系统为5.0或以上,设置了状态栏后需要在布局的根布局里添加 android:fitsSystemWindows="true"
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StatusBarUtils.setStatusColor(this,setStatusBarColor());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            StatusBarUtils.setStatusBarTextColor(this,statusTextColorIsDark());
        }
        setContentView(initLayout());
        initView();
        initListener();
        initData();
    }

    /**
     * 设置状态栏颜色
     */
    protected abstract int setStatusBarColor();

    /**
     * 状态栏文本颜色是否是黑色
     * @return
     */
    protected abstract boolean statusTextColorIsDark();


    /**
     * 初始化界面
     * @return
     */
    protected abstract int initLayout();

    /**
     * 初始化控件
     */
    protected abstract void initView();

    /**
     * 初始化监听事件
     */
    protected abstract void initListener();

    protected void initData(){
    }

    /**
     * 页面跳转  使用时直接new 要跳转的Activity().intoActivity(当前页面)
     *                     要跳转的页面需要继承本Activity
     * @param context
     */
    public void intoActivity(Context context){
        Intent intent = new Intent(context, this.getClass());
        context.startActivity(intent);
    }

    /**
     * 短时间的toast
     * @param msg
     */
    @SuppressLint("ShowToast")
    protected void showToastShort(String msg){
        if (toast == null){
            toast = Toast.makeText(this,msg,Toast.LENGTH_SHORT);
        }else {
            toast.setText(msg);
        }
        toast.show();
    }

    /**
     * 长时间的toast
     * @param msg
     */
    @SuppressLint("ShowToast")
    protected void showToastLong(String msg){
        if (toast == null){
            toast = Toast.makeText(this,msg,Toast.LENGTH_LONG);
        }else {
            toast.setText(msg);
        }
        toast.show();
    }

}

StatusBarUtils 类

public class StatusBarUtils {

    /**
     * 设置状态栏沉浸
     * @param activity
     */
    public static void  setTranslucentStatus(Activity activity) {
        // 5.0以上系统状态栏透明
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

    /**
     * 设置状态栏指定颜色
     * @param activity
     * @param color
     */
    public static void setStatusColor(Activity activity, int color) {
        // 5.0以上系统状态栏颜色
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(color);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

    /**
     * 设置状态栏文本颜色  如果dark为false,则为白色
     * @param activity
     * @param dark
     */
    @TargetApi(Build.VERSION_CODES.M)
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public static void setStatusBarTextColor(Activity activity, boolean dark) {
        View decor = activity.getWindow().getDecorView();
        if (dark) {
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }
    }

}
发布了13 篇原创文章 · 获赞 2 · 访问量 1113

猜你喜欢

转载自blog.csdn.net/AneTist/article/details/102662879