web-dev-qa-db-fra.com

Erreur de rendu du tiroir de navigation dans l'éditeur de disposition ADT

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

L'ajout de cela à la mise en page xml selon Créer un tiroir de navigation la documentation produit

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)
30
gaara87

J'ai un problème similaire. Si vous souhaitez prévisualiser la disposition pendant un moment, vous pouvez modifier temporairement la largeur et la hauteur en absolu.

par exemple:-

<Android.support.v4.widget.DrawerLayout

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

    Android:layout_width="400px"

    Android:layout_height="800px">
38
Asmok

Ce problème est résolu dans la version 18 de la bibliothèque de support, publiée en juillet.

dans Eclipse, cliquez avec le bouton droit sur votre projet> sélectionnez Android> ajouter une bibliothèque de support.

Fixé. :)

19
Joakim

D'un autre Question J'ai résolu le problème en étendant DrawerLayout et en forçant les Measure_Specs corrects:

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

}
16
joecks

La réponse d'Asmok est gentille mais je suis ce type de personne qui oublie toujours d'inverser ces modifications "temporaires". (En d'autres termes, le temporaire peut devenir très gros ^^)

Au lieu de cela, j'utilise le <include> balise et divise la mise en page en deux fichiers.

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

Pour la mise en page principale (qui est l'interface utilisateur de l'activité en question), je peux maintenant utiliser l'éditeur graphique d'Eclipse car tout le contenu vit dans un seul fichier main_layout.xml.
De plus, je peux facilement inclure le tiroir de navigation dans différentes activités sans avoir à copier et coller le code.

9
nuala

La solution la plus simple que j'ai trouvée était de mettre dans l'aperçu Theme.Holo.Light.Dialog.FixedSize fonctionnel et paisible ...

Image here

5
Walterjp

Les vues personnalisées sont difficiles à afficher correctement pour l'éditeur d'interface utilisateur dans Eclipse (il en va de même pour l'éditeur d'interface utilisateur dans Android Studio). C'est normal.

2
Ahmad