Cómo depurar vista personalizada en el Editor de diseño gráfico de ADT

¿Cómo depurar una vista personalizada en la vista previa gráfica de un XML de diseño utilizando el complemento de ADT Eclipse?


Escribí una vista personalizada, la puse en un XML de presentación y puedo verla en el Editor de diseño gráfico de ADT . Puedo ver mi vista personalizada como la forma en que los chicos de Google hicieron en Google I / O 2011: Herramientas de desarrollo de Android . Sin embargo, mi vista personalizada se comporta erróneamente en la vista previa (no hay problema en los emuladores / dispositivos, pero no estoy usando View.isInEditMode() ). Creo que una variable tiene un valor equivocado, pero no puedo confirmar. He intentado:

¡Buena pregunta! Me pregunto lo mismo. Tener una buena previsualización en el editor de diseño es realmente muy difícil y parece ser bastante poca documentación sobre lo que se puede y no se puede hacer cuando "isineditmode" es cierto (por ejemplo, analice los atributos XML personalizados en el AttributeSet entrante en el constructor De las opiniones no parece funcionar, etc, etc.).

Incluso tengo problemas con la búsqueda de vistas por ID en una vista personalizada. Una cosa simple como

 mTextView = (TextView)myLayout.findViewById(R.id.view_id); 

Después de inflar mi diseño de vista personalizada devuelve nulo sólo cuando se ejecuta el diseño desde el editor (es decir, isineditmode () == true). Cuando se ejecuta la aplicación en un teléfono funciona.

Te dejo aquí lo que me ayudó al intentar mejorar la previsualización de mis diseños en el editor de diseño:

1- Búsqueda de las vistas : Utilizo la propiedad TAG, ya que la función findViewWithTag () funciona en modo de edición. Así que utilizo el Id para el TAG

 <TextView android:id="@+id/myTextViewId" android:layout_width="match_parent" android:layout_height="wrap_content" ... android:tag="mytextViewId" /> 

Y luego encontrar las vistas con la etiqueta:

 if(isineditmode()){ ((TextView)myLayout.findViewWithTag("myTextViewId")).setText("Test text"); } 

2- Comprobación de algunos valores para saber por qué a veces mi vista personalizada no se puede instanciar en modo de edición, o comprobar si algunos proerties se pueden consultar en modo de edición y conocer su valor . Utilizo una vista de texto especial en el diseño padre en el que se colocará mi vista personalizada y la dejaré escondida y con una etiqueta especial:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > ... <com.example.myCustomView ... /> ... <TextView android:id="@+id/DebugView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="debug" android:textSize="16sp" android:textColor="#FFFFFF" android:visibility="gone" /> </LinearLayout> 

Este diseño lineal sería el padre de mi vista personalizada, y el que necesito abrir en el editor de diseño para obtener una vista previa de mi vista personalizada. La "visibilidad" textview de "depuración" es "ido" por lo que no molestaré si no es necesario. Entonces, cuando necesito comprobar algo hago lo siguiente en el código java de mi vista personalizada:

 if(isineditmode()){ TextView wDebugView = (TextView)this.getRootView().findViewWithTag("debug"); wDebugView.setVisibility(View.VISIBLE); wDebugView.setText(Integer.valueOf(getPaddingTop()).toString()); } 

En este ejemplo compruebo una propiedad de la vista, como el relleno superior.

Nota importante: necesita convertir manualmente a String el valor que se mostrará en la vista "depurar", de lo contrario se bloqueará y le dará un error.

Espero eso ayude.

Y si alguien tiene alguna idea de por qué encontrar puntos de vista por id no funciona, cualquier ayuda sería apreciada.

Estoy de acuerdo en que esto es frustrante. Para mí findViewWithTag () no funciona, siempre devuelve null en el modo de vista previa de ADT. Pero pude configurar un registro simple para un archivo local (no Android) y colarlo para depurar mis vistas personalizadas, por ejemplo, como a continuación (esto verifica que esEditMode para asegurar que es un no-op si se ejecuta accidentalmente en Android):

 /** ONLY FOR ECLIPSE: enables us to do some basic logging to a file to debug our custom views in Eclipse preview mode */ public static void eclipseEditModeLog(View view, String s) { if (view.isInEditMode()) { try { // Open our hack log file in append mode if (eclipseLogOut == null) { File eclipseLogFile = new File("/home/mwk/tmp/eclipse.log"); eclipseLogOut = new BufferedWriter(new FileWriter(eclipseLogFile, true)); } eclipseLogOut.write(new Date().toLocaleString() + ": " + s + "\n"); eclipseLogOut.flush(); } catch (IOException e) {} } } private static BufferedWriter eclipseLogOut = null; 
  • Java.lang.NoClassDefFoundError: com.facebook.android.Facebook
  • ¿Qué Android IDE es mejor - Android Studio o Eclipse?
  • Utilizando ADT y SDK manager, adjuntar código fuente android para eclipse
  • Vista previa de paisaje de la disposición de xml de androide en Eclipse
  • El tipo nuevo AdapterView.OnItemSelectedListener () {} debe implementar el error del método abstracto heredado. Eclipse
  • Error al crear Contexto 0x3005
  • Error false de Eclipse: La función '__android_log_print' no pudo ser resuelta (Android, CDT)
  • Vista web de android que muestra la página en blanco
  • Problemas de instalación del complemento de Android en eclipse
  • Android redibujar diseño de forma programática
  • El complemento Android ADT Eclipse, parseSDKContent falló
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.