#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类

为了方便往后APP开发的便捷程度,我们要自定义一个抽象的BaseActivity,用作Acitvity的基类,把一些常用的方法或者每个界面都需要的操作比如沉浸栏,标题栏等集成在里面,让每个Activity 继承BaseActivity,从而降低我们的工作量和代码结构。

文章目录

  • 一、前期准备:沉浸式状态栏实现
  • 二、自定义标题栏的实现
    • (一)base_titlebar.xml 标题栏的布局样式编写
    • (二)BaseActivity调用
    • (三)Activity中调用
  • 三、跳转界面及Toast的简化使用
    • (一)BaseActivity的方法:
    • (二)Activity继承BaseActivity的使用:
  • 四、Android-butterknife-zelezny插件使用
    • (一)添加Butter Knife依赖
    • (二)Android Studio安装butterknife-zelezny插件
    • (三)butterknife-zelezny插件的使用
  • 五、给出综合以上功能的基类代码
    • (一)BaseActivity
    • (二)BaseFragment
    • (三)BaseActivityPicture带有图片沉浸功能
    • (四)BaseFragmentPicture带有图片沉浸功能

一、前期准备:沉浸式状态栏实现

本次BaseActivity的打造需要用到我上一篇 Android 沉浸式状态栏的解决方案的内容,请小伙伴点击链接先做第一部准备

BaseActivity的方法:

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*   以下是沉浸栏功能实现   */
        //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
        StatusBarUtil.setRootViewFitsSystemWindows(this, true);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(this);
        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
        if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(this, 0x55000000);
        }
    }

二、自定义标题栏的实现

(一)base_titlebar.xml 标题栏的布局样式编写



    
    

        

        

        
            
        
    

(二)BaseActivity调用

/*
 *@创建者 Ben
 *@创建时间 2019/7/21 23:56
 *@描述   通用基类,集成了沉浸栏、自定义标题栏、跳转界面和Toast的简化操作
 */
public abstract class BaseActivity extends AppCompatActivity {
    /**标题栏控件**/
    private RelativeLayout base;
    private RelativeLayout title;
    private TextView base_back;
    private TextView base_title;
    private TextView base_right;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.base_titlebar);
        findView();
        //标题栏默认不显示,子类可以重写显示
        showtitle(false);
        //右边的按键默认不显示,子类可以重写显示
        showBaseRight(false);
    }
    
    private void findView() {
        base = findViewById(R.id.base);
        title = findViewById(R.id.title);
        base_back = findViewById(R.id.base_back);
        base_title = findViewById(R.id.base_title);
        base_right = findViewById(R.id.base_right);
        //绑定返回按钮的点击事件
        base_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    /**
     * 重写setContentView,让继承者可以继续设置setContentView
     * @param newid
     */
    @Override
    public void setContentView(int newid) {
        View view = getLayoutInflater().inflate(newid, null);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        lp.addRule(RelativeLayout.BELOW, R.id.title);
        if (null != base)
            base.addView(view, lp);
    }

    /**
     * 设置中间标题文字
     * @param Text
     */
    public void setBaseTitleText(CharSequence Text) {
        if (base_title != null)
            base_title.setText(Text);
    }


    /**
     * 设置右边标题的文字
     * @param Text
     */
    public void setBaseRightText(CharSequence Text) {
        if (base_right != null)
            base_right.setText(Text);
    }


    /**
     * 设置右边按钮是否显示
     * @param show
     */
    public void showBaseRight(boolean show) {
        if (base_right != null) {
            if (show)
                base_right.setVisibility(View.VISIBLE);
            else
                base_right.setVisibility(View.GONE);
        }
    }

    /**
     * 设置标题栏是否显示
     * @param show
     */
    public void showtitle(boolean show) {
        if (title != null) {
            if (show)
                title.setVisibility(View.VISIBLE);
            else
                title.setVisibility(View.GONE);
        }
    }

    //找到返回控件,执行点击事件或更改背景等
    public TextView getBaseBack() {
        return base_back;
    }

    //找到标题控件,执行点击事件或更改背景等
    public TextView getBaseTitle() {
        return base_title;
    }

    //找到右侧按钮控件,执行点击事件或更改背景等
    public TextView getBaseRight() {
        return base_right;
    }

(三)Activity中调用

下面列举一些常用的方法,大家可以举一反三,一般只需要设置标题栏的显示以及设置标题的文本即可使用

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //设置显示标题栏(在BaseActivity默认不显示,在子类需要调用就改为显示标题栏)
        showtitle(true);
        //设置标题名称
        setBaseTitleText("我是标题");
        //设置标题的点击事件
        getBaseTitle().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                toastLong("点击了标题");
            }
        });
        //是否显示右边按钮(默认不显示)
        showBaseRight(true);
        //设置右边按钮的背景图标
        getBaseRight().setBackgroundResource(R.drawable.ic_back);
        //设置右边按钮的点击事件
        getBaseRight().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                toastLong("右边按钮点击");
            }
        });
    }

三、跳转界面及Toast的简化使用

(一)BaseActivity的方法:

public abstract class BaseActivity extends AppCompatActivity {
    /**封装toast对象**/
    private static Toast toast;
    
     @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //onCreate方法不用改变
    }
     /**
     * [页面跳转]
     */
    public void startActivity(Class clz) {
        startActivity(clz, null);
    }

    /**
     * [携带数据的页面跳转]
     */
    public void startActivity(Class clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * [含有Bundle通过Class打开编辑界面]
     */
    public void startActivityForResult(Class cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     *    * 此处是一个封装的Toast方法,可以取消掉上一次未完成的,直接进行下一次Toast
     *    * 有效解决类似MIUI系统显示toast自带app名称前缀
     *    * @param text 需要toast的内容
     */
    public void toastShort(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        }
        toast.show();
    }

    public void toastLong(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        }
        toast.show();
    }

(二)Activity继承BaseActivity的使用:

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		//Toast的简化使用
        toastLong("我是长的消息框");
        toastshort("我是短的消息框");
        //普通页面跳转
        startActivity(Test.class);
        //携带数据的页面跳转
        Bundle bundle=new Bundle();
        bundle.putString("key","qqq");
        bundle.putString("key1","qqw");
        bundle.putString("key2","www");
        startActivity(Test.class,bundle);
    }

四、Android-butterknife-zelezny插件使用

当你控件很多,你又懒得写findViewById()以及onClick点击事件。那么Android-butterknife-zelezny插件就是解决这个重复机械性的问题。
Android-butterknife-zelezny 是根据Butter Knife定制的一款插件,能够方便快速初始化控件
简单来说,当你的布局中有多个控件的时候,这个插件能够快速帮你创建好初始化控件以及onClick代码
Butter Knife的GitHub链接

(一)添加Butter Knife依赖

在app里面的buid.gradle加入依赖

android {
  ...
  // Butterknife requires Java 8.
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  ...
  implementation 'com.jakewharton:butterknife:10.1.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
  ...
}

在Project里面的buid.gradle加入依赖

buildscript {
  repositories {
    mavenCentral()
    google()
   }
  dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:10.1.0'
  }
}

(二)Android Studio安装butterknife-zelezny插件

打开AS,点击左上角的菜单 file—>setting—>plugins—>Marketplace 然后输入butterknife-zelezny.点击安装重启
#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类_第1张图片

(三)butterknife-zelezny插件的使用

进行以上操作后,我们就能使用这个插件了,注意,使用的时候,光标一定要放在布局文件处!!!!
#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类_第2张图片
#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类_第3张图片
#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类_第4张图片
效果如下
#Android项目# ——day04 编写一个集成沉浸栏、自定义标题栏、跳转界面和Toast的基类_第5张图片

五、给出综合以上功能的基类代码

(一)BaseActivity

/*
 *@创建者 Ben
 *@创建时间 2019/7/21 23:56
 *@描述   通用基类,集成了沉浸栏、自定义标题栏、跳转界面和Toast的简化操作
 */
public abstract class BaseActivity extends AppCompatActivity {
    /**封装toast对象**/
    private static Toast toast;
    /**标题栏**/
    private RelativeLayout base;
    private RelativeLayout title;
    private TextView base_back;
    private TextView base_title;
    private TextView base_right;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.base_titlebar);
        findView();
        //标题栏默认不显示,子类可以重写显示
        showtitle(false);
        //右边的按键默认不显示,子类可以重写显示
        showBaseRight(false);

        /*   以下是沉浸栏功能实现   */
        //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
        StatusBarUtil.setRootViewFitsSystemWindows(this, true);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(this);
        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
        if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(this, 0x55000000);
        }
    }


    private void findView() {
        base = findViewById(R.id.base);
        title = findViewById(R.id.title);
        base_back = findViewById(R.id.base_back);
        base_title = findViewById(R.id.base_title);
        base_right = findViewById(R.id.base_right);
        base_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    /**
     * 重点是重写setContentView,让继承者可以继续设置setContentView
     * 重写setContentView
     *
     * @param newid
     */
    @Override
    public void setContentView(int newid) {
        View view = getLayoutInflater().inflate(newid, null);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        lp.addRule(RelativeLayout.BELOW, R.id.title);
        if (null != base)
            base.addView(view, lp);
    }

    /**
     * 设置中间标题文字
     *
     * @param Text
     */
    public void setBaseTitleText(CharSequence Text) {
        if (base_title != null)
            base_title.setText(Text);
    }


    /**
     * 设置右边标题
     *
     * @param Text
     */
    public void setBaseRightText(CharSequence Text) {
        if (base_right != null)
            base_right.setText(Text);
    }


    /**
     * 设置右边按钮是否显示
     *
     * @param show
     */
    public void showBaseRight(boolean show) {
        if (base_right != null) {
            if (show)
                base_right.setVisibility(View.VISIBLE);
            else
                base_right.setVisibility(View.GONE);
        }
    }

    /**
     * 设置标题栏是否显示
     *
     * @param show
     */
    public void showtitle(boolean show) {
        if (title != null) {
            if (show)
                title.setVisibility(View.VISIBLE);
            else
                title.setVisibility(View.GONE);
        }
    }

    //找到返回控件,执行点击事件或更改背景等
    public TextView getBaseBack() {
        return base_back;
    }

    //找到标题控件,执行点击事件或更改背景等
    public TextView getBaseTitle() {
        return base_title;
    }

    //找到右侧按钮控件,执行点击事件或更改背景等
    public TextView getBaseRight() {
        return base_right;
    }


    /**
     * [页面跳转]
     */
    public void startActivity(Class clz) {
        startActivity(clz, null);
    }

    /**
     * [携带数据的页面跳转]
     */
    public void startActivity(Class clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * [含有Bundle通过Class打开编辑界面]
     */
    public void startActivityForResult(Class cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     *    * 此处是一个封装的Toast方法,可以取消掉上一次未完成的,直接进行下一次Toast
     *    * 有效解决类似MIUI系统显示toast自带app名称前缀
     *    * @param text 需要toast的内容
     */
    public void toastShort(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        }
        toast.show();
    }

    public void toastLong(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        }
        toast.show();
    }
}

(二)BaseFragment

没有集成自定义标题栏,如果需要的话,只需要在onStart()方法里面写上代码就行

/*
 *@创建者 Ben
 *@创建时间 2019/7/21 23:56
 */
public abstract class BaseFragment extends Fragment {
    /***封装toast对象**/
    private static Toast toast;

    @Override
    public void onStart() {
        super.onStart();
        //这里注意下 因为在评论区发现有网友调用setRootViewFitsSystemWindows 里面 winContent.getChildCount()=0 导致代码无法继续
        //是因为你需要在setContentView之后才可以调用 setRootViewFitsSystemWindows

        //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
        StatusBarUtil.setRootViewFitsSystemWindows(getActivity(), true);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(getActivity());

        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
        if (!StatusBarUtil.setStatusBarDarkTheme(getActivity(), true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(getActivity(), 0x55000000);
        }
    }

    /**
     * [页面跳转]
     */
    public void startActivity(Class clz) {

        startActivity(clz, null);
    }

    /**
     * [携带数据的页面跳转]
     */
    public void startActivity(Class clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * [含有Bundle通过Class打开编辑界面]
     */
    public void startActivityForResult(Class cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     *    * 此处是一个封装的Toast方法,可以取消掉上一次未完成的,直接进行下一次Toast
     *    * @param context context
     *    * @param text 需要toast的内容
     *    
     */
    public void Toastshort(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT);
            toast.setText(text);
        } else {
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT);
            toast.setText(text);
        }
        toast.show();
    }

    public void Toastlong(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_LONG);
            toast.setText(text);
        } else {
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_LONG);
            toast.setText(text);
        }
        toast.show();
    }
}

(三)BaseActivityPicture带有图片沉浸功能

其实和BaseActivity一样,只是改了
StatusBarUtil.setRootViewFitsSystemWindows(this, false); //BaseActivity是true(预留出状态栏高度的 padding)

/*
 *@创建者 Ben
 *@创建时间 2019/7/21 23:56
 */
public abstract class BaseActivityPicture extends AppCompatActivity {
    /**封装toast对象**/
    private static Toast toast;
    /**标题栏**/
    private RelativeLayout base;
    private RelativeLayout title;
    private TextView base_back;
    private TextView base_title;
    private TextView base_right;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.base_titlebar);
        findView();
        //标题栏默认不显示,子类可以重写显示
        showtitle(false);
        //右边的按键默认不显示,子类可以重写显示
        showBaseRight(false);

        /*   以下是沉浸栏功能实现   */
        //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
      StatusBarUtil.setRootViewFitsSystemWindows(this, false);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(this);
        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
        if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(this, 0x55000000);
        }
    }


    private void findView() {
        base = findViewById(R.id.base);
        title = findViewById(R.id.title);
        base_back = findViewById(R.id.base_back);
        base_title = findViewById(R.id.base_title);
        base_right = findViewById(R.id.base_right);
        base_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    /**
     * 重点是重写setContentView,让继承者可以继续设置setContentView
     * 重写setContentView
     *
     * @param newid
     */
    @Override
    public void setContentView(int newid) {
        View view = getLayoutInflater().inflate(newid, null);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        lp.addRule(RelativeLayout.BELOW, R.id.title);
        if (null != base)
            base.addView(view, lp);
    }

    /**
     * 设置中间标题文字
     *
     * @param Text
     */
    public void setBaseTitleText(CharSequence Text) {
        if (base_title != null)
            base_title.setText(Text);
    }


    /**
     * 设置右边标题
     *
     * @param Text
     */
    public void setBaseRightText(CharSequence Text) {
        if (base_right != null)
            base_right.setText(Text);
    }


    /**
     * 设置右边按钮是否显示
     *
     * @param show
     */
    public void showBaseRight(boolean show) {
        if (base_right != null) {
            if (show)
                base_right.setVisibility(View.VISIBLE);
            else
                base_right.setVisibility(View.GONE);
        }
    }

    /**
     * 设置标题栏是否显示
     *
     * @param show
     */
    public void showtitle(boolean show) {
        if (title != null) {
            if (show)
                title.setVisibility(View.VISIBLE);
            else
                title.setVisibility(View.GONE);
        }
    }

    //找到返回控件,执行点击事件或更改背景等
    public TextView getBaseBack() {
        return base_back;
    }

    //找到标题控件,执行点击事件或更改背景等
    public TextView getBaseTitle() {
        return base_title;
    }

    //找到右侧按钮控件,执行点击事件或更改背景等
    public TextView getBaseRight() {
        return base_right;
    }


    /**
     * [页面跳转]
     */
    public void startActivity(Class clz) {
        startActivity(clz, null);
    }

    /**
     * [携带数据的页面跳转]
     */
    public void startActivity(Class clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * [含有Bundle通过Class打开编辑界面]
     */
    public void startActivityForResult(Class cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     *    * 此处是一个封装的Toast方法,可以取消掉上一次未完成的,直接进行下一次Toast
     *    * 有效解决类似MIUI系统显示toast自带app名称前缀
     *    * @param text 需要toast的内容
     */
    public void toastShort(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
            toast.setText(text);
        }
        toast.show();
    }

    public void toastLong(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        } else {
            toast = Toast.makeText(this, "", Toast.LENGTH_LONG);
            toast.setText(text);
        }
        toast.show();
    }
}

(四)BaseFragmentPicture带有图片沉浸功能

没有集成自定义标题栏,如果需要的话,只需要在onStart()方法里面写上代码就行
其实和BaseActivityPicture一样,改了
StatusBarUtil.setRootViewFitsSystemWindows(this, false); //BasFragment是true(预留出状态栏高度的 padding)

/*
 *@创建者 Ben
 *@创建时间 2019/7/21 23:56
 */
public abstract class BaseFragmentPicture extends Fragment {
    /***封装toast对象**/
    private static Toast toast;

    @Override
    public void onStart() {
        super.onStart();
        //这里注意下 因为在评论区发现有网友调用setRootViewFitsSystemWindows 里面 winContent.getChildCount()=0 导致代码无法继续
        //是因为你需要在setContentView之后才可以调用 setRootViewFitsSystemWindows

        //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
        StatusBarUtil.setRootViewFitsSystemWindows(getActivity(), false);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(getActivity());

        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
        if (!StatusBarUtil.setStatusBarDarkTheme(getActivity(), true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(getActivity(), 0x55000000);
        }
    }

    /**
     * [页面跳转]
     */
    public void startActivity(Class clz) {
        startActivity(clz, null);
    }

    /**
     * [携带数据的页面跳转]
     */
    public void startActivity(Class clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * [含有Bundle通过Class打开编辑界面]
     */
    public void startActivityForResult(Class cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     *    * 此处是一个封装的Toast方法,可以取消掉上一次未完成的,直接进行下一次Toast
     *    * @param context context
     *    * @param text 需要toast的内容
     *    
     */
    public void Toastshort(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT);
            toast.setText(text);
        } else {
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT);
            toast.setText(text);
        }
        toast.show();
    }

    public void Toastlong(String text) {
        if (toast != null) {
            toast.cancel();
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_LONG);
            toast.setText(text);
        } else {
            toast = Toast.makeText(getActivity(), "", Toast.LENGTH_LONG);
            toast.setText(text);
        }
        toast.show();
    }

}

你可能感兴趣的:(Android个人项目)