BGASwipeBackLayout-Android
BGASwipeBackLayout-Android copied to clipboard
侧滑回来后,无法打开DrawerLayout
手机是小米5s,Android API 24 侧滑回来后,无法通过drawerLayout.openDrawer(Gravity.END)这句代码打开抽屉,通过手指侧滑拉出抽屉倒是没问题,但是通过那句代码就只能显示一层半透明的背景
发现是由于侧滑回来后重新onAttachedToWindow导致drawerLayout.mFirstLayout=true,所以目前我个人的解决方法是在执行drawerLayout.openDrawer前执行drawerLayout.requestLayout(),重新将drawerLayout.mFirstLayout置为false,希望有更好的解决方法!
执行drawerLayout.openDrawer前执行drawerLayout.requestLayout(),重新将drawerLayout.mFirstLayout置为false
@reakingf 执行requestlayout() 没有使drawerLayout.mFirstLayout置为false ,需要什么地方特殊处理吗
执行drawerLayout.openDrawer前执行drawerLayout.requestLayout(),重新将drawerLayout.mFirstLayout置为false
@reakingf 执行requestlayout() 没有使drawerLayout.mFirstLayout置为false ,需要什么地方特殊处理吗
不用啊,其实将mFirstLayout置为false是在onLayout中执行的,requestLayout只是为了触发onLayout
@reakingf
侧滑后 ,drawerLayout 没有执行onLayout() 方法, 而且侧滑返回执行
protected void onDetachedFromWindow() { super.onDetachedFromWindow(); this.mFirstLayout = true; }
protected void onAttachedToWindow() {
super.onAttachedToWindow();
this.mFirstLayout = true;
}
导致 mFirstLayout 这个参数一直为true ,进而导致openDrawer 里打开失败
@reakingf
侧滑后 ,drawerLayout 没有执行onLayout() 方法, 而且侧滑返回执行
protected void onDetachedFromWindow() { super.onDetachedFromWindow(); this.mFirstLayout = true; }
protected void onAttachedToWindow() { super.onAttachedToWindow(); this.mFirstLayout = true; }
导致 mFirstLayout 这个参数一直为true ,进而导致openDrawer 里打开失败
对的啊,就是因为侧滑回来后会重新执行onAttachedToWindow,导致mFirstLayout = true,因此我们在下一次执行openDrawer之前需要让drawerLayout重新执行onLayout。并不是说侧滑后会自动执行onLayout,这是需要我们手动执行的,如调用requestLayout。
是这样的,正常调用requestLayout方法都会重新执行onLayout()方法,但是侧滑回来后,不知道是否是
/**
* Called from layout when this view should
* assign a size and position to each of its children.
*
* Derived classes with children should override
* this method and call layout on each of
* their children.
* @param changed This is a new size or position for this view
* @param left Left position, relative to parent
* @param top Top position, relative to parent
* @param right Right position, relative to parent
* @param bottom Bottom position, relative to parent
*/
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { }
DrawerLayout控件已经不会在改变大小,导致onlayou 不会再重新执行,我这边是有使用requestLayout ,在debug 过程中侧滑返回是没有看到执行的
@reakingf
@yanchengdeng 不知是你没理解我的意思还是我没理解你的意思。首先侧滑返回DrawerLayout是不会自动执行onlayout的,我的意思是要你在侧滑返回之后,再次重新openDrawer之前,也就是这两个事件之间,手动去调用requestLayout。
我也遇到这个问题了,希望作者能提供一个更好的方法解决