| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- package eVVM.apk.common;
- import android.os.Build;
- import android.os.Bundle;
- import android.view.ViewTreeObserver;
- import android.view.WindowManager;
- import com.gyf.barlibrary.ImmersionBar;
- import com.hjq.base.BaseActivity;
- import cn.bingoogolapple.swipebacklayout.BGASwipeBackHelper;
- import eVVM.apk.R;
- public abstract class UIActivity extends BaseActivity
- implements BGASwipeBackHelper.Delegate,
- ViewTreeObserver.OnGlobalLayoutListener {
- private ImmersionBar mImmersionBar;//状态栏沉浸
- private BGASwipeBackHelper mSwipeBackHelper;//侧滑返回
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // 在 super.onCreate(savedInstanceState) 之前调用该方法
- initSwipeBack();
- super.onCreate(savedInstanceState);
- }
- @Override
- protected void initLayout() {
- super.initLayout();
- initImmersion();
- }
- /**
- * 初始化沉浸式
- */
- protected void initImmersion() {
- //初始化沉浸式状态栏
- if (isStatusBarEnabled()) {
- statusBarConfig().init();
- //设置标题栏
- if (getTitleId() > 0) {
- ImmersionBar.setTitleBar(this, findViewById(getTitleId()));
- }
- }
- }
- public BGASwipeBackHelper getSwipeBackHelper() {
- return mSwipeBackHelper;
- }
- /**
- * 初始化滑动返回。在 super.onCreate(savedInstanceState) 之前调用该方法
- */
- private void initSwipeBack() {
- mSwipeBackHelper = new BGASwipeBackHelper(this, this);
- // 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回」
- // 下面几项可以不配置,这里只是为了讲述接口用法。
- // 设置滑动返回是否可用。默认值为 true
- mSwipeBackHelper.setSwipeBackEnable(true);
- // 设置是否仅仅跟踪左侧边缘的滑动返回。默认值为 true
- mSwipeBackHelper.setIsOnlyTrackingLeftEdge(true);
- // 设置是否是微信滑动返回样式。默认值为 true
- mSwipeBackHelper.setIsWeChatStyle(true);
- // 设置阴影资源 id。默认值为 R.drawable.bga_sbl_shadow
- mSwipeBackHelper.setShadowResId(R.drawable.bga_sbl_shadow);
- // 设置是否显示滑动返回的阴影效果。默认值为 true
- mSwipeBackHelper.setIsNeedShowShadow(true);
- // 设置阴影区域的透明度是否根据滑动的距离渐变。默认值为 true
- mSwipeBackHelper.setIsShadowAlphaGradient(true);
- // 设置触发释放后自动滑动返回的阈值,默认值为 0.3f
- mSwipeBackHelper.setSwipeBackThreshold(0.3f);
- // 设置底部导航条是否悬浮在内容上,默认值为 false
- mSwipeBackHelper.setIsNavigationBarOverlap(false);
- }
- /**
- * {@link BGASwipeBackHelper.Delegate}
- */
- /**
- * 是否支持滑动返回。这里在父类中默认返回 true 来支持滑动返回,如果某个界面不想支持滑动返回则重写该方法返回 false 即可
- */
- @Override
- public boolean isSupportSwipeBack() {
- // android 9.0系统滑动返回上一级时闪屏:https://github.com/bingoogolapple/BGASwipeBackLayout-Android/issues/154
- return Build.VERSION.SDK_INT < Build.VERSION_CODES.P;
- }
- /**
- * 正在滑动返回
- *
- * @param slideOffset 从 0 到 1
- */
- @Override
- public void onSwipeBackLayoutSlide(float slideOffset) {
- }
- /**
- * 没达到滑动返回的阈值,取消滑动返回动作,回到默认状态
- */
- @Override
- public void onSwipeBackLayoutCancel() {
- }
- /**
- * 滑动返回执行完毕,销毁当前 Activity
- */
- @Override
- public void onSwipeBackLayoutExecuted() {
- mSwipeBackHelper.swipeBackward();
- }
- @Override
- public void onBackPressed() {
- // 正在滑动返回的时候取消返回按钮事件
- if (mSwipeBackHelper.isSliding()) {
- return;
- }
- mSwipeBackHelper.backward();
- super.onBackPressed();
- }
- /**
- * 是否使用沉浸式状态栏
- */
- public boolean isStatusBarEnabled() {
- return true;
- }
- /**
- * 获取状态栏沉浸的配置对象
- */
- public ImmersionBar getStatusBarConfig() {
- return mImmersionBar;
- }
- /**
- * 初始化沉浸式状态栏
- */
- protected ImmersionBar statusBarConfig() {
- //在BaseActivity里初始化
- mImmersionBar = ImmersionBar.with(this)
- .statusBarDarkFont(statusBarDarkFont()) //默认状态栏字体颜色为黑色
- .keyboardEnable(false, WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
- | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); //解决软键盘与底部输入框冲突问题,默认为false,还有一个重载方法,可以指定软键盘mode
- //必须设置View树布局变化监听,否则软键盘无法顶上去,还有模式必须是SOFT_INPUT_ADJUST_PAN
- getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(this);
- return mImmersionBar;
- }
- /**
- * {@link ViewTreeObserver.OnGlobalLayoutListener}
- */
- @Override
- public void onGlobalLayout() {
- }//不用写任何方法
- /**
- * 获取状态栏字体颜色
- */
- public boolean statusBarDarkFont() {
- //返回false表示白色字体
- return true;
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (mImmersionBar != null) mImmersionBar.destroy();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
- }
- }
- }
|