2014-12-03 27 views
7

ile ölçülmelidir this öğretici takip ediyorum ve garip bir sorun ile karşı karşıya.Runtime DrawerLayout MeasureSpec.EXACTLY excpetion

Benim DrawerLayout içinde ama onun layout_height veya layout_width kodlanmış sayıdan daha başka bir şey ayarlanmış olup olmadığını, bu çalışma zamanı istisnası atar fark etmez.

Grafik Düzeni aracında bir çıktı oluşturmaya çalışırken bu hataya ilişkin birçok rapor görüyorum, ancak bir çalışma zamanı hatası bulamadı.

Ben mümkünse benim yükseklik ve genişliğini hardcoding önlemek istiyoruz sürümü 21.0.2

sadece artık güncellenmiş son destek kütüphanesi var.

Dosyanın başlangıcı buna benzer. Bu şekilde eziyor.

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

ve StackTrace Çeşitli ekran boyutlarında için "doğru" yapmak için en iyi yolu nedir, bu sabit şekilde zorundaysa

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) 

mı? tedbir yöntemine DrawerLayout ağır basan

+0

Bu bağlantı, bu sorunu çözmemde yardımcı oldu. http://stackoverflow.com/a/17995545/3033942 – wolfaviators

+0

Burada olduğu gibi parametreleri belirttiniz mi? https://developer.android.com/training/implementing-navigation/nav-drawer.html Temelde çekmecenin düzeni ve yer çekimi düzeni? – Michal

cevap

2

deneyin

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

Ben benim durumumda bu çözebilir setContent() önce requestWindowFeature(Window.FEATURE_NO_TITLE); koyarak buldum.

İlgili konular