SwipeBackHelper

@RequiresApi(api = 19)
class SwipeBackHelper(activity: Activity)

Activity侧滑返回支持,状态栏透明

思路:

  1. 在构造方法中设置透明状态栏,利用反射将窗口转为不透明,同时监听布局变化以解决adjustResize失效问题

  1. 在Activity的dispatchTouchEvent方法中拦截触摸事件,满足条件则进行侧滑

  1. 侧滑事件前,利用反射将窗口转为透明;侧滑取消后,利用反射将窗口转为不透明

使用说明:

  1. 仅支持SDK19(Android4.4)及以上

  1. 因状态栏透明,布局会从屏幕顶端开始绘制,Toolbar高度需自行调整

  1. 状态栏透明会导致输入法的adjustPan模式失效,建议设置为adjustResize

  1. 必须设置以下属性,否则侧滑时无法透视下层Activity

@android:color/transparent

  1. 必须设置以下属性,否则ActionMode会插入页面顶端,且状态栏会显示黑色

true

  1. SDK21(Android5.0)以下必须设置以下属性,否则无法通过反射将窗口转为透明

true

  1. 侧滑时会利用反射将窗口转为透明,此时会引起下层Activity生命周期变化,留意可能因此导致的严重问题

(a) onDestory -> onCreat -> onStart -> (onResume -> onPause) -> onStop

(b) onRestart -> onStart -> (onResume -> onPause) -> onStop

  1. 当顶层Activity方向与下层Activity方向不一致时侧滑会失效(下层方向未锁定除外),建议关闭该层Activity侧滑功能。

示例场景:视频APP的播放页面和下层页面。

  1. 如需动态支持横竖屏切换,屏幕方向需指定为"behind"跟随栈底Activity方向,同时在onCreate中判断若不支持横竖屏切换,则锁定屏幕方向(避免behind失效)。

Author

Simon Lee

Constructors

SwipeBackHelper
Link copied to clipboard
fun SwipeBackHelper(activity: Activity)

Functions

dispatchTouchEvent
Link copied to clipboard
fun dispatchTouchEvent(event: MotionEvent)
Activity触摸事件分发,当横向滑动时触发侧滑返回,同时触摸事件改变为取消下发给childView
getShadowView
Link copied to clipboard
fun getShadowView(swipeBackView: ViewGroup?): View
返回侧滑时左侧的阴影视图被子类重写时,注意要添加到swipeBackView的父容器中
getSwipeBackView
Link copied to clipboard
fun getSwipeBackView(decorView: ViewGroup): ViewGroup
返回侧滑事件操作的视图
getWindowBackGroundView
Link copied to clipboard
fun getWindowBackGroundView(decorView: ViewGroup): View?
返回窗口背景视图,用于覆盖当输入法及导航栏变化时底部的黑色因{android:windowBackground}透明,输入法及导航栏变化时底部为黑色
hideInputSoft
Link copied to clipboard
fun hideInputSoft()
隐藏输入法
onTouchEvent
Link copied to clipboard
fun onTouchEvent(event: MotionEvent)
Activity触摸事件,当子View未消费时进行滑动方向判断
setBackgroundColor
Link copied to clipboard
fun setBackgroundColor(color: Int)
设置窗口背景颜色,用于覆盖当输入法及导航栏变化时底部的黑色因{android:windowBackground}透明,输入法及导航栏变化时底部为黑色
setEnable
Link copied to clipboard
fun setEnable(enabled: Boolean)
设置是否开启侧滑返回