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:
-
android.util.Log.d()
- No hay salida en
LogCat
oConsole
- No hay salida en
-
System.out.println()
- No hay salida en
LogCat
oConsole
- No hay salida en
-
Toast.makeText().show()
-
NullPointerException
enandroid.widget.Toast.show
-
- Establecer punto de interrupción en mi vista personalizada
- No se rompe en Eclipse
-
throw new IllegalStateException(debugMessage)
(?!)-
debugMessage
no aparece en elError Log
-
- Establecer el título de la actividad por
((Activity)getContext()).setTitle(debugMessage)
- Sin efecto
- Defina el título de la ventana por
((Activity)getContext()).getWindow().setTitle(debugMessage)
-
NullPointerException
(lawindow
esnull
)
-
-
Agregar
TextView
dinámicamente- Android sdk content loader at 0% ... y nada funciona
- Corregir errores de Eclipse al utilizar Android NDK y std :: vector
- ¿Cómo cambiar el icono de una aplicación de Android en Eclipse?
- ¿Cómo uso el depurador de Eclipse en un AsyncTask cuando se desarrolla para Android?
- ¿Cómo quitar completamente una biblioteca externa en un proyecto?
final TextView textView = new TextView(getContext()); textView.setText(debugMessage); this.addView(textView);
- Se muestra
debugMessage
pero mi diseño está arruinado - Sólo funciona si la vista personalizada es un
ViewGroup
- ¿Por qué debo reiniciar ADB con tanta frecuencia en Eclipse para poder conectarme a un dispositivo Android?
- Eclipse ADT Error: No se puede ejecutar programa adb
- Android Maven en Eclipse - Creación de una actividad
- ¿Cómo puedo actualizar Cordova 2.9.0 a 3.6 en Android Developer Tools?
- Android: no se pudo encontrar un AVD compatible con el error "Android 1.6" de destino
- Ruta de construcción incompleta sólo en algunos espacios de trabajo (Android)
- No se puede conectar la versión 2.3.6 de Android en Ubuntu 12.04
- Error "Ningún objetivo seleccionado" en el emulador de tableta de Android de Eclipse
¡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;
- Android databinding error de prueba de unidad Error al analizar las opciones del compilador de enlace de datos. Params:
- ¿Cómo puedo crear una función similar a JQuery Slider en la aplicación web de iPhone / Android?