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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM