vista ver veo studio puedo previa muestra error diseño aparece java android android-layout android-custom-view android-studio

java - ver - El editor de diseño de Android Studio no puede representar vistas personalizadas



vista diseño android studio (5)

Como me enteré hoy, por fin, los errores de "Classdef no encontrado", etc. durante la representación del diseño son en realidad engañosos. Lo que realmente quieren decir es que hay algún error durante la ejecución de su widget.

La forma más sencilla de averiguar dónde exactamente se encuentra el problema es esta:

  1. En su archivo de diseño XML, reemplace su clase de vista personalizada (llamémosla "MyFrameLayout" por claridad) con la clase de stock de Android (por ejemplo, con FrameLayout) y asegúrese de que el Editor de diseños funcione. Agregue atributos de "herramientas: ..." para que pueda ver el contenido, no un diseño vacío. Por ejemplo, si tiene el widget EditText en su vista personalizada, agregue este atributo, que se usará solo en modo Diseño:

    tools:text="Sample content"

("herramientas: el espacio de nombre es agregado por Android Studio automáticamente)

  1. Devuelva su nombre de clase original (por ejemplo, "MyFrameLayout") al diseño XML. ¿Funciona ahora?

Si no:

  1. Copie la definición de su vista personalizada a una nueva clase temporal (por ejemplo, "MyFrameLayoutBeforeFix"), para mayor comodidad. Lo usará para compararlo con la clase "MyFrameLayout", que comenzará a modificar ahora.

  2. Recrear su clase "MyFrameLayout" desde cero, utilizando Android Studio, comenzando con un mínimo absoluto: debe compilarse. Como resultado, la clase Java contendrá "extends" FrameLayout "y constructores / métodos requeridos, por ejemplo en este caso:

    package com.myprojectxxx.view; import android.content.Context; import android.util.AttributeSet; import android.widget.FrameLayout; public class MyFrameLayout extends FrameLayout { public MyFrameLayout(Context context) { super(context); } public MyFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } public MyFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }

  3. Asegúrese de que esta vista personalizada se muestre normalmente. ¡Debería, al menos en el año 2016!

  4. Mueva el código pieza por pieza desde una copia "MyFrameLayoutBeforeFix" a esta clase, verificando que no haya errores en cada paso ...

La secuencia anterior parece obvia pero funcionó para mí. El truco es que el Editor de diseño inicia su clase en su propio contexto, y esto puede causar algunos errores inesperados en su código, que "funciona" cuando se inicia desde el interior de la aplicación ...

Otro truco es usar isInEditMode() verificar el código de su widget para omitir partes, que pueden no funcionar en la vista Diseño. P.ej:

MyClass myClass = isInEditMode() ? null : MyClass.getInstance();

En Android Studio, el editor de diseño no puede previsualizar vistas personalizadas en xml.

Ejemplo muy simple:

public class MyCustomView extends FrameLayout { public MyCustomView(Context context) { super(context); } public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); } public MyCustomView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } }

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <com.myprojectxxx.view.MyCustomView android:layout_width="48dp" android:layout_height="48dp" /> </LinearLayout>

Android Studio siempre dice:

Problemas de renderizado

Las siguientes clases no pudieron ser encontradas:

  • com.myprojectxxx.view.MyCustomView (Fix Build Path, Create Class)

Consejo: intente construir el proyecto

Por supuesto, TENGO esa clase. Si hago clic en "Crear clase", se queja de que ya existe la misma clase. Si reconstruyo ese proyecto, nada cambia.

Y, sí, el proyecto funciona muy bien en mi dispositivo Android. Además, se procesa muy bien en Eclipse ADT. Sin embargo, en Android Studio, siempre dice que "LAS CLASES NO PUEDEN ENCONTRARSE".

¿Android Studio no tiene la capacidad de previsualizar un archivo xml con vistas personalizadas? ¿Qué pasa con esto?



Enfrentando el mismo problema, tuve que anular los constructores de argumento tres y cuatro:

public View(Context context, AttributeSet attrs, int defStyle) public View(Context context, AttributeSet attrs, int defStyle, int defStyleRes)

Luego reconstruye el proyecto.


Los componentes de vista personalizada también son compatibles y se muestran correctamente en IDEA, pero dado que IntelliJ IDEA utiliza archivos de clase de su directorio de salida para representar dichos componentes, primero tiene que hacer build-> make project en su proyecto.

reference


También puede deberse a que está utilizando un tema incorrecto para representar sus diseños. Asegúrese de elegir el que está utilizando en su proyecto.