2015-07-31 9 views
13

Sto cercando di implementare un cassetto di navigazione, ma continuo a ricevere questo errore. Ho visto le domande simili ma non ha funzionato per me. Ho il seguente layout di activity_main2.xml:DrawerLayout deve essere misurato con l'errore MeasureSpec.EXACTLY

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

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

    <RelativeLayout 
     android:layout_gravity="left|start" 
     android:layout_width="match_parent" 
     android:background="#fff" 
     android:layout_height="match_parent"> 

     <ListView 
      android:id="@+id/left_drawer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:divider="#eee" 
      android:background="#fff" 
      android:dividerHeight="1dp" /> 
    </RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

Sul mio activity_main2.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    initView(); 
    if (toolbar != null) { 
     //toolbar.setTitle(""); 
     setSupportActionBar(toolbar); 
    } 
    initDrawer(); 
} 

private void initView() { 
    leftDrawerList = (ListView) findViewById(R.id.left_drawer); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    navigationDrawerAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, leftSliderData); 
    leftDrawerList.setAdapter(navigationDrawerAdapter); 
    leftDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if(position == 1){ 
       drawerLayout.closeDrawer(Gravity.LEFT); 
      } 
     } 
    }); 
} 

private void initDrawer() { 
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
     } 
    }; 
    drawerLayout.setDrawerListener(drawerToggle); 
} 

Speriamo che qualcuno mi aiuterà con la giusta direzione.

Molte grazie in anticipo!

+0

Dove viene visualizzato questo errore? In runtime o in Android Studio? Stai usando l'ultima libreria di supporto? –

+0

utilizzando Android Studio e ottenuto l'errore di runtime: java.lang.IllegalArgumentException: DrawerLayout deve essere misurato con MeasureSpec.EXACTLY. –

+0

Vedere la mia versione di prova https: // StackOverflow.it/questions/32515527/illegal-argument-exception-drawerlayout-deve-essere-misurato-con-measurepec-exac/47882575 # 47882575 –

risposta

23

mio DrawerLayout era dentro un LinearLayout:

<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="wrap_content" 
    android:orientation="vertical" 
    android:background="@drawable/abohawawallpapersqr" 
    tools:context=".MainActivity"> 

     <include layout="@layout/toolbar" /> 

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

     <!-- ...... --> 
     </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 

Poi ho risolto il problema modificando il layout_height="wrap_content" a layout_height="match_parent" della LinearLayout .Così il codice è:

<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" 
    android:background="@drawable/abohawawallpapersqr" 
    tools:context=".MainActivity"> 
5

Assicurarsi che la vostra attività non è un'attività "Dialog", controlla nel manifest. Ho fatto questo errore e ho ottenuto l'errore.

13

Per coloro che hanno ancora un'eccezione, garantire l' altezza tuoi DrawerLayout è match_parent

+0

grazie per la tua risposta La tua soluzione ha funzionato per me –

0

utilizzando Android.Support.V4.Widget; utilizzando Android.Util;

. . .

class MyDrawerLayout: DrawerLayout 
{ 
    public MyDrawerLayout(Context context) : base(context) 
    { 

    } 
    public MyDrawerLayout(Context context, IAttributeSet attrs) : base(context, attrs) 
    { 

    } 
    public MyDrawerLayout(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle) 
    { 

    } 
    public MyDrawerLayout(IntPtr context, Android .Runtime.JniHandleOwnership jniHandleOwnership) : base(context, jniHandleOwnership) 
    { 

    } 

    protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     widthMeasureSpec = MeasureSpec.MakeMeasureSpec(MeasureSpec.GetSize(widthMeasureSpec), MeasureSpecMode.Exactly); 
     heightMeasureSpec = MeasureSpec.MakeMeasureSpec(MeasureSpec.GetSize(heightMeasureSpec), MeasureSpecMode.Exactly); 

     base.OnMeasure(widthMeasureSpec, heightMeasureSpec); 

    } 




} 
0

Per errore, ho impostato una finestra personalizzata tema per l'attività, invece di un tema un'attività personalizzata:

activity.setTheme(R.style.StyledDialogTheme); 

Dopo ho corretto questo, Workes nuovo.

-3

Got a Build-> Clean progetto poi Rigenerare progetto errore verrà risolvere

+0

Davvero ???? su Stackoverflow? –

5

Questo può succedere anche se è stata impostata layout_width-wrap_content. Nel mio caso è stato risolto impostando la larghezza su match_parent. Spero che questo aiuti qualcuno.

0
requestWindowFeature(Window.FEATURE_NO_TITLE); 

è stato risolto il problema creando l'attività come di seguito;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainmenu); 
} 
5

Ciò può verificarsi anche a causa del nuovo ConstraintLayout. Assicurarsi che il layout del cassetto non sia nella gerarchia di ConstraintLayout.

Questo è un bug davvero stupido da parte di Android. Proverò a presentare un bug per questo.

+0

Cosa preferisci invece? Lo sostituisco con LinearLayout e ottengo: Errore durante il gonfiaggio della classe android.support.constraint.LinearLayout – waseefakhtar

+1

Hai assolutamente ragione. RelativeLayout ha funzionato meglio per me qui. – waseefakhtar

Problemi correlati