Android 获取 屏幕可操作区域高度的方法2022-01-28

pic

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android侧滑返回方案,支持SDK19(Android4.4)及以上。目录示例demo功能介绍实现原理集成方式使用方式注意事项示例demoDemo下载示例效果点此下载 或扫描下面二维码功能介绍支持SDK19(Android4.4)及以上Activity的侧滑返回,同时实现沉浸式状态栏。实现原理侧滑时利用反射将窗口转为透明,结束后再利用反射将窗口还原为不透明。详细分析集成方式在module的build.gradle中添加如下代码    dependencies {         implementation 'cn.simonlee.widget:swipeback:1.0.10'     }使用方式STEP.1在Activity的styles中配置如下属性<item name="android:windowBackground">@android:color/transparent</item>STEP.2在Activity的onCreate方法获取SwipeBackHelper实例@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);     setContentView(R.layout.activity_swipeback);    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {         mSwipeBackHelper = new SwipeBackHelper(this);        //设置窗口背景颜色,以覆盖不可见区域的黑色背景(不可见区域常见为当输入法及导航栏变化时的背景)         mSwipeBackHelper.setWindowBackgroundColor(getResources().getColor(R.color.colorWindowBackground));     } }STEP.3在Activity的dispatchTouchEvent和onTouchEvent中分发触摸事件,如果仅希望侧边触发,可以不用onTouchEvent@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {    if (mSwipeBackHelper != null) {         mSwipeBackHelper.dispatchTouchEvent(event);     }    return super.dispatchTouchEvent(event); }@Overridepublic boolean onTouchEvent(MotionEvent event) {    if (mSwipeBackHelper != null) {         mSwipeBackHelper.onTouchEvent(event);     }    return super.onTouchEvent(event); }注意事项Tips.1如需要适配SDK21(Android5.0)以下,必须在styles中配置如下属性。SDK21及以上无需此属性<item name="android:windowIsTranslucent">true</item>Tips.2因状态栏透明,输入法的adjustPan模式不会生效,建议设置为adjustResizeTips.3因状态栏透明,布局会从屏幕顶端开始绘制,需自行调整paddingTop//获取状态栏的高度public int getStatusBarHeight() {    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");    try {        return getResources().getDimensionPixelSize(resourceId);     } catch (Resources.NotFoundException e) {        return 0;     } }Tips.4侧滑的核心原理是利用反射转换窗口透明,这会影响到下层Activity的生命周期。侧滑过程中窗口转为透明时,下层Activity会被唤醒,进入onStart状态,如果发生屏幕旋转,下层Activity还将会进行重建。当我们将窗口恢复为不透明,下层Activity会重新进入onStop状态。因此如果你的Activity代码逻辑比较混乱,使用之前务必进行逻辑优化。Tips.5当顶层Activity方向与下层Activity方向不一致时侧滑会失效(下层方向未锁定除外),请关闭该层Activity侧滑功能。 示例场景:竖屏界面点击视频,进入横屏播放。Tips.6如需动态支持横竖屏切换(比如APP中有“支持横屏”开关),屏幕方向需指定为behind跟随栈底Activity方向,同时在onCreate中进行判断,若不支持横竖屏切换则锁定屏幕方向(因为经测试SDK21中behind无效)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值