Illegal Argument Exception - DrawerLayout must be measured with MeasureSpec.EXACTLY

后端 未结 4 712
再見小時候
再見小時候 2021-01-22 21:23

Stacktrace:

09-10 07:56:56.448  24867-24867/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalArgumentException: DrawerLayout must          


        
4条回答
  •  花落未央
    2021-01-22 21:50

    Error:

    Illegal Argument Exception - DrawerLayout must be measured with MeasureSpec.EXACTLY

    From error log i can suggest to create custom class that extends DrawerLayout and forcing the correct Measure_Specs:

    public class MyDrawerLayout extends DrawerLayout {
    
        public MyDrawerLayout(Context context) {
            super(context);
        }
    
        public MyDrawerLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public MyDrawerLayout(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);
        }
    
    }
    

    or As a temporary workaround try to set layout_width and/or layout_height to a specific size (e.g. 500dp) instead of match_parent.

    EDIT:

    BaseActivity.java

    import com.steve.database.MyDrawerLayout;
    
    private MyDrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    
    
    LayoutInflater mInflater = (LayoutInflater) getApplicationContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null);
    
    mDrawerLayout = (MyDrawerLayout)mCustomView.findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)mCustomView.findViewById(R.id.list_menu);
    

提交回复
热议问题