2014-12-03 2 views
7

Ich folge this Tutorial von und ich bin mit einem seltsamen Problem konfrontiert.Runtime DrawerLayout muss mit MeasureSpec.EXACTLY exception

Es spielt keine Rolle, was in meinem DrawerLayout ist, aber wenn ihr layout_height oder layout_width auf etwas anderes als fest einprogrammierte Zahl gesetzt sind, wirft sie diese Ausnahme Laufzeit.

Ich habe viele Berichte über diesen Fehler beim Rendern einer Ausgabe im Tool "Grafisches Layout" erhalten, konnte aber bei einem Laufzeitfehler keine finden.

Ich habe die neueste Support-Bibliothek, auf der Version würde 21.0.2

ich meine Höhe und Breite vermeiden zu möglichst gerade jetzt aktualisiert mögen.

Der Anfang der Datei sieht so aus. Auf diese Weise zerfällt es.

<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" > 

und die Stacktrace ist

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) 

Wenn es fest einprogrammiert werden muss, was ist der beste Weg, es „richtig“ für verschiedene Bildschirmgrößen zu machen?

+0

Dieser Link hat mir geholfen, dieses Problem zu lösen. http://StackOverflow.com/a/17995545/3033942 – wolfaviators

+0

Haben Sie Parameter wie hier eingegeben? https://developer.android.com/training/implementing-navigation/nav-drawer.html Hauptsächlich Reihenfolge der Layouts und Schwerkraft der Schublade? – Michal

Antwort

2

Versuchen Sie, die DrawerLayout der auf Maß Methode

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

zwingende fand ich requestWindowFeature(Window.FEATURE_NO_TITLE); vor setContent() setzen könnte dies in meinem Fall lösen.