由於公司項目要求適應橫豎屏,寫了兩個不同的布局分別放在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