2013-05-17 27 views
30

Navigation Drawer render lỗi trong ADT BTV trình bày

<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#111" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" /> 

Thêm đó đến xml bố trí theo Create a Navigation Drawer tài liệu hướng dẫn sản xuất

Exception raised during rendering: DrawerLayout must be measured with MeasureSpec.EXACTLY. 
Exception details are logged in Window > Show View > Error Log 

java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY. 
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:591) 
    at android.view.View.measure(View.java:15518) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
    at android.view.View.measure(View.java:15518) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
    at android.view.View.measure(View.java:15518) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
    at android.view.View.measure(View.java:15518) 
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.measureView(RenderSessionImpl.java:607) 
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:509) 
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:334) 
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:440) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1545) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1302) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:1059) 
    at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegatePageChange(LayoutEditorDelegate.java:686) 
    at com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.pageChange(CommonXmlEditor.java:360) 
    at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:292) 
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1300) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1285) 
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1079) 
    at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3028) 
    at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1749) 
    at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:278) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1276) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3562) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3186) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414) 
+0

bạn có thể gửi toàn bộ xml? – Karakuri

+0

Có lẽ điều này sẽ giúp sb. sau này: Tôi đã giải quyết vấn đề này bằng cách tạo bố cục gốc của DrawerLayout. Nếu có bất kỳ bố cục nào tồn tại, bạn sẽ nhận được ngoại lệ này. –

Trả lời

38

Tôi có vấn đề tương tự. Nếu bạn muốn bố cục xem trước trong giây lát, bạn có thể thay đổi chiều rộng và chiều cao theo chiều dọc thành tuyệt đối.

ví dụ như: -

<android.support.v4.widget.DrawerLayout 

    xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="400px" 

    android:layout_height="800px"> 
+1

nó phù hợp với tôi. –

+2

Bổ sung: Nếu có chế độ xem kết thúc tốt đẹp DrawerLayout thì nó sẽ có 'android: layout_height =" match_parent "' nhưng NOT wrap_parent nếu không lỗi này sẽ xảy ra – Diolor

+0

cuối cùng .. cảm ơn –

2

Custom Views rất khó để hiển thị một cách chính xác cho Trình chỉnh sửa giao diện người dùng trong nhật thực (tương tự với trình chỉnh sửa giao diện người dùng trong Android Studio). Điều này là bình thường.

+2

Tôi sẽ không chấp nhận điều này như bình thường nhưng đúng là các công cụ giao diện người dùng không tối ưu cho Android. Nó đã được cải thiện rất nhiều năm qua nhưng nó buồn thậm chí chính thức các thành phần như DrawerLayout không thể được trả lại mà không có lỗi. –

9

câu trả lời Asmok là thoải mái nhưng tôi loại người luôn quên để đảo ngược như chỉnh sửa "tạm thời". (Nói cách khác tạm thời có thể trở nên rất lớn ^^)

Vì vậy, thay vào đó tôi sử dụng thẻ <include> và chia bố cục thành hai tệp.

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

    <!-- The main content view --> 
    <include layout="@layout/main_layout" /> 

    <!-- The navigation drawer --> 
    <include layout="@layout/navigation_drawer"/> 
</android.support.v4.widget.DrawerLayout> 

Đối với cách bố trí chính (đó là giao diện người dùng của activit trong câu hỏi) bây giờ tôi có thể sử dụng soạn thảo đồ họa của Eclipse như tất cả cuộc sống nội dung trong một tập tin duy nhất main_layout.xml.
Hơn nữa, tôi có thể dễ dàng bao gồm ngăn điều hướng trong các hoạt động khác nhau mà không cần sao chép và dán mã.

+0

Nó không hoạt động đối với tôi .. @yoshi. –

+1

@HiteshDhamshaniya: Đó là tin buồn khi nghe. : C Có thể viết một câu hỏi khác, nơi bạn có thể hiển thị một số XML của bạn và cách bạn cố gắng thực hiện nó vì nó sẽ dễ đọc hơn nhiều so với thảo luận vấn đề thông qua các nhận xét.Bạn có thể sử dụng liên kết 'share' để tham chiếu đến câu trả lời này và cung cấp liên kết tới câu hỏi của bạn trong phần bình luận ở đây. Vì vậy, nó sẽ cho phép người khác theo con đường của bạn dễ dàng hơn :) bất cứ điều gì xảy ra: đừng hoảng sợ! – yoshi

+1

Cảm ơn bạn đã trả lời, nhưng là cơ sở tạm thời, tôi nên đi theo Asmok theo cách được đề xuất, nó hoạt động –

16

Từ Question khác tôi giải quyết vấn đề bằng cách mở rộng DrawerLayout, và buộc Measure_Specs đúng:

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

} 
+1

Đây vẫn là vấn đề trong thời gian chạy, mặc dù Google tuyên bố đã sửa lỗi này trong bản sửa đổi Thư viện hỗ trợ Android 19 (tháng 10 năm 2013). Hack này hoạt động tốt hơn nhiều so với hack trước đây của tôi. – DataGraham

+1

nó hiển thị cửa sổ nhỏ hơn: ( – usman

19

này được cố định trong phiên bản 18 của thư viện hỗ trợ, phát hành vào tháng Bảy.

trong Eclipse nhấp chuột phải vào dự án của bạn> chọn công cụ android> thêm thư viện hỗ trợ.

Đã sửa lỗi. :)

+1

không cố định trong phiên bản 19.0.1 mà tôi đang sử dụng –

5

Giải pháp đơn giản nhất tôi thấy được để đưa vào xem trước Theme.Holo.Light.Dialog.FixedSize chức năng và hòa bình ...

Image here

+0

+1 từ tôi để mở tài khoản StackOverflow và cung cấp giải pháp mặc dù nó không tối ưu - nó hoạt động. -Rất vui ở đây với những khẩu súng ... – AVIDeveloper

Các vấn đề liên quan