为了减少重复代码和冗余逻辑,引用基类。其他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);
}
}
}