2014-12-03 2 views
7

나는 this 튜토리얼을 따르고 있으며 이상한 문제에 직면하고 있습니다.Runtime DrawerLayout은 MeasureSpec.EXACTLY excpetion으로 측정해야합니다.

DrawerLayout의 내용은 중요하지 않지만 layout_height 또는 layout_width이 하드 코드 번호가 아닌 다른 값으로 설정된 경우이 런타임 예외가 발생합니다.

그래픽 레이아웃 도구에서 출력을 렌더링하려고 할 때 발생하는이 오류에 대한 많은 보고서가 있지만 런타임 오류에서 찾을 수 없습니다.

이 나는 ​​가능하면 내 높이와 너비를 하드 코딩하지 않도록하고 싶습니다 버전 21.0.2

에 지금 업데이트 된 최신 지원 라이브러리를 가지고있다.

파일의 시작 부분은 다음과 같습니다. 이렇게하면, 그것은 부서진다.

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

및 스택 트레이스는 다양한 화면 크기에 대해 "오른쪽"할 수있는 가장 좋은 방법은 무엇인가, 그것은 하드 코딩해야하는 경우

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) 

입니까? 측정 방법에 DrawerLayout 년대를 오버라이드 (override)

+0

이 링크를 사용하면이 문제를 해결할 수 있습니다. http://stackoverflow.com/a/17995545/3033942 – wolfaviators

+0

여기에 매개 변수를 지정 했습니까? https://developer.android.com/training/implementing-navigation/nav-drawer.html 주로 서랍의 레이아웃과 중력의 순서는 무엇입니까? – Michal

답변

2

봅니다

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

나는 내 경우에이 문제를 해결할 수 setContent() 전에 requestWindowFeature(Window.FEATURE_NO_TITLE); 퍼팅 발견했다.