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

4

2

Stacktrace:

09-10 07:56:56.448  24867-24867/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY.
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:814)
            at android.view.View.measure(View.java:15848)
            at com.android.internal.widget.ActionBarView.onMeasure(ActionBarView.java:1098)
            at android.view.View.measure(View.java:15848)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.widget.ActionBarContainer.onMeasure(ActionBarContainer.java:271)
            at android.view.View.measure(View.java:15848)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
            at android.view.View.measure(View.java:15848)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
            at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:229)
            at android.view.View.measure(View.java:15848)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
            at android.view.View.measure(View.java:15848)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
            at android.view.Choreographer.doCallbacks(Choreographer.java:562)
            at android.view.Choreographer.doFrame(Choreographer.java:532)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

Logcat doesn't pointed out the error line.I have posted the relevant code.

I'm getting illegal argument exception at DrawerLayout must be measured with MeasureSpec.Exactly at runtime.

BaseActivity.java:

  private ListView mDrawerList;
  private DrawerLayout mDrawerLayout;
  private ArrayList<Chapter> chapterArray;
  ChapterListAdapter adapter;
  SqliteDbHelper dbHelper;


  dbHelper = new SqliteDbHelper(this);

  dbHelper.openDataBase();

  LayoutInflater mInflater = (LayoutInflater) getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  View mCustomView = mInflater.inflate(R.layout.custom_actionbar, null); 

  mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  mDrawerList = (ListView) findViewById(R.id.list_menu);

  chapterArray=new ArrayList<Chapter>();
  chapterArray=dbHelper.getChapterDetails();

  adapter = new ChapterListAdapter(this,chapterArray);
  mDrawerList.setAdapter(adapter);

custom_actionbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#5467F7">

        <TextView
            android:id="@+id/title_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:text="Chapters"
            android:textColor="#FFFFFF"
            android:textStyle="bold" />

    </RelativeLayout>

    <ListView
        android:id="@+id/list_menu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#E36666"
        android:choiceMode="singleChoice"
        android:dividerHeight="1dp"
        />

</android.support.v4.widget.DrawerLayout>

I dont know how to solve this one.Anyone can help me with this.Thank You.

Briton answered 11/9, 2015 at 4:34 Comment(0)
M
10

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);
Megdal answered 11/9, 2015 at 4:39 Comment(10)
Thank you for your answer.But still getting the same error after done thatBriton
I just created custom class MyDrawerLayout and added that above code you were posted.Briton
Where I have to initialize the MyDrawerLayout?Briton
try to import from your project instead of importing from android.support.v4.widget.DrawerLayout (Eg. com.packagename.MyDrawerLayout)Megdal
Instead of DrawerLayout if I use MyDrawerLayout I get ClassCast Exception:DrawerLayout cannot be cast to MyDrawerLayoutBriton
try com.steve.database.DrawerLayout instead of android.support.v4.widget.DrawerLayout in xml fileMegdal
it shows an FirstActivity page without any crash.But i dont get the Hamburger menu atlast.Briton
let me check and tell you afterwards,Sure I will get the hamburger menu drawerBriton
I told you know i will solve that hamburger menu issue and accept your answer.It is working successfully.Your answer helped me.Thank You very much.Briton
this is working well in 2017, one thing to keep in mind (especially if you try to follow the docs like I did) is that you need to also update your XML layout to use the new subclass as opposed to android.support.v4[...] or else you will get a ClassCast ExceptionStinky
I
3

I tried lots of solution nothing worked.After a long time i found a solution by my self.

i was using Linear Layout as a parent of my inflating class i just replaced with Relative Layout

after that everything is working fine.For your better understanding given below is my code that i am using currently for inflating class

FrameLayout layoutContainer = (FrameLayout ) findViewById(R.id.container);
    LayoutInflater layoutInflater = (LayoutInflater)
            this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 layoutContainer.addView(layoutInflater.inflate(R.layout.ecom_home_activity, null));

And ecom_home_activity is inflating class.The code of is given below.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/gray_background_color"
android:fillViewport="true"
android:orientation="vertical"
android:scrollbars="none">

<RelativeLayout
    android:id="@+id/no_data_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#cc000000"
    android:gravity="center">

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:indeterminate="true"
        android:indeterminateTint="@color/offer_activity_background"
        android:indeterminateTintMode="src_atop"
        tools:ignore="UnusedAttribute" />

    <TextView
        android:id="@+id/noDataHeading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/progressBar"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:text="@string/offerlist_please_wait"
        android:textColor="@color/white_color"
        android:textSize="@dimen/twenty_six_text_size" />

    <TextView
        android:id="@+id/noDataText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/noDataHeading"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:text="@string/offerlist_while_we_are"
        android:textColor="@color/white_color"
        android:textSize="@dimen/fourteen_size_text" />
</RelativeLayout>

<ImageView
    android:id="@+id/sleeping_bird"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:scaleType="centerInside" />

<TextView
    android:id="@+id/textView_taking_nap"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/sleeping_bird"
    android:layout_marginTop="@dimen/five_dp_margin_padding"
    android:gravity="center"
    android:text="@string/offerlist_coucou_taking_nap"
    android:textSize="@dimen/sixteen_size_text_heading"
    android:visibility="gone" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</LinearLayout>

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerListOfferProducts"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:footerDividersEnabled="false"
    android:gravity="center"
    android:headerDividersEnabled="false"
    android:paddingBottom="@dimen/five_dp_margin_padding"
    android:paddingLeft="@dimen/eight_dp_margin_padding"
    android:paddingRight="@dimen/eight_dp_margin_padding"
    android:paddingTop="@dimen/eight_dp_margin_padding"
    android:scrollbars="none" />

Previously i was using Linear layout of ecom_home_activity class i just changed Linear layout with Relative layout

After that everything is working fine.In your case if you are using Linear Layout of your inflating class then Replace with Relative Layout.hope my answer will help you cheers.

Indicant answered 19/12, 2017 at 8:14 Comment(0)
S
0

set layout_width and layout_height to specific size, not match_parent or fill_parent.

Spurious answered 27/10, 2015 at 10:16 Comment(2)
set layout_width and layout_height to specific size, not match_parent or fill_parent.Spurious
Post only as an answer not a comment please, also if you could add the solved xml sample for the question that could be great for others in the future. Explaining why the measure fails would me meningful too.Willdon
C
-1
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".UserListActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:background="@drawable/common_gradient"
    android:layoutDirection="rtl"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.2">

        <TextView
            android:id="@+id/userType_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="نوع المستخدم"
            android:textColor="#000000"
            android:textSize="20sp"
            tools:text="نوع المستخدم" />

        <TextView
            android:id="@+id/className_textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/userType_textView"
            android:layout_centerHorizontal="true"
            android:text="إسم القسم"
            android:textColor="#000000"
            android:textSize="16sp"
            tools:text="إسم القسم" />

        <ImageButton
            android:layout_width="30dp"
            android:layout_height="20dp"
            android:layout_alignBottom="@+id/userType_textView"
            android:layout_marginLeft="15dp"
            android:layout_marginStart="15dp"
            android:background="@android:color/transparent"
            android:contentDescription="@string/desc"
            android:onClick="showMenuAction"
            android:scaleType="fitCenter"
            android:src="@drawable/menu" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.8"

        android:background="#FAFAFA">

        <SearchView
            android:id="@+id/user_searchView"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:background="#9CC3D7" />

        <ListView
            android:id="@+id/users_listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:layout_alignParentBottom="true"
            android:layout_below="@+id/user_searchView"
            android:layout_centerHorizontal="true"
            android:divider="#DFDEE1"
            android:dividerHeight="1dp" />
    </RelativeLayout>

</LinearLayout>

<android.support.v4.widget.DrawerLayout
    android:id="@+id/navigationDrawerUser"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:fitsSystemWindows="true"
    android:layoutDirection="rtl">


    <ExpandableListView
        android:id="@+id/menu_listView_user"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#195269"
        android:choiceMode="singleChoice"
        android:divider="#2C637D"
        android:dividerHeight="1dp"
        android:groupIndicator="@null">

    </ExpandableListView>

</android.support.v4.widget.DrawerLayout>

Cassondra answered 22/5, 2017 at 15:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.