2014-12-03 7 views
7

Sto seguendo il tutorial this e sto affrontando uno strano problema.Runtime DrawerLayout deve essere misurato con l'escrezione MeasureSpec.EXACTLY

Non importa ciò che è nel mio DrawerLayout, ma se la sua layout_height o layout_width sono impostati su un valore diverso numero hardcoded, si genera questa eccezione di runtime.

Ho visto un sacco di segnalazioni di questo errore generato durante il tentativo di rendere un output nello strumento Layout grafico, ma non è stato in grado di trovare alcun errore di runtime.

Ho l'ultima libreria di supporto, aggiornato solo ora alla versione 21.0.2

Vorrei evitare hardcoding la mia altezza e la larghezza, se possibile.

L'inizio del file è simile a questo. In questo modo, si schiaccia.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

e stacktrace è

12-04 00:57:51.051: E/AndroidRuntime(26254): FATAL EXCEPTION: main 
12-04 00:57:51.051: E/AndroidRuntime(26254): Process: com.lablabla.homedestroyer, PID: 26254 
12-04 00:57:51.051: E/AndroidRuntime(26254): java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY. 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:814) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.View.measure(View.java:17430) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1141) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.Choreographer.doFrame(Choreographer.java:550) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.os.Handler.handleCallback(Handler.java:739) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.os.Handler.dispatchMessage(Handler.java:95) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.os.Looper.loop(Looper.java:135) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at android.app.ActivityThread.main(ActivityThread.java:5221) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at java.lang.reflect.Method.invoke(Native Method) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at java.lang.reflect.Method.invoke(Method.java:372) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
12-04 00:57:51.051: E/AndroidRuntime(26254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Se deve essere hardcoded, qual è il modo migliore per farlo "giusto" per le varie dimensioni dello schermo?

+0

Questo collegamento mi ha aiutato a risolvere questo problema. http://stackoverflow.com/a/17995545/3033942 – wolfaviators

+0

Hai specificato parametri come qui? https://developer.android.com/training/implementing-navigation/nav-drawer.html Principalmente ordine di layout e gravità del cassetto? – Michal

risposta

2

Prova sovrascrivendo i DrawerLayout del metodo su misura

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); 
} 

} 
0

ho trovato mettendo requestWindowFeature(Window.FEATURE_NO_TITLE); prima setContent() potrebbe risolvere questo nel mio caso.

Problemi correlati