Android横竖屏切换遇到的一些坑。
由于公司项目要求适应横竖屏,写了两个不同的布局分别放在layout 和layout-land文件夹(不能在configchanges里面加screensize,否则无效),但是切换的时候出现了问题。
1,DrawerLayout错误。
DrawerLayout must be measured with MeasureSpec.EXACTLY,我在fragment中采用的Drawlayout布局,切换至横屏时报了这个错误。
猜想是因为发生了布局的宽高发生了变化导致的。最后在stackoverflow上找到了解决方法。
上代码:
public class CustomDrawerLayout extends DrawerLayout { public CustomDrawerLayout(Context context) { super(context); } public CustomDrawerLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { widthMeasureSpec = MeasureSpec.makeMeasureSpec( MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY); heightMeasureSpec = MeasureSpec.makeMeasureSpec( MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
自定义一个DrawerLayout,重写里面的onMeasure方法。
2.Fragment残留
切换横竖屏fragment不能隐藏,看了一下log ,猜想是fragment销毁重建后onSaveInstance。onRestoreInstance保存了之前的东西,
重写这两个方法,解决。
@Override protected void onSaveInstanceState(Bundle outState) { } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { }//去掉里面的super