Intereting Posts

Отладка пользовательского вида в редакторе графических макетов ADT

Как отлаживать пользовательский вид в графическом представлении XML-макета с помощью плагина ADT Eclipse?


Я написал пользовательский вид, поместил его в XML-макет, и я могу его просмотреть в редакторе графических макетов ADT . Я могу просмотреть свое пользовательское представление, например, как ребята Google в Google I / O 2011: инструменты для разработки Android . Тем не менее, мое пользовательское представление ведет себя неправильно в предварительном просмотре (никаких проблем с эмуляторами / устройствами, но я не использую View.isInEditMode() ). Я думаю, что переменная имеет неправильное значение, но я не могу подтвердить. Я пробовал:

  • android.util.Log.d()
    • Нет результата в LogCat или Console
  • System.out.println()
    • Нет результата в LogCat или Console
  • Toast.makeText().show()
    • NullPointerException в android.widget.Toast.show
  • Установка точки останова в моем пользовательском представлении
    • Не нарушает Eclipse
  • throw new IllegalStateException(debugMessage) (?!)
    • debugMessage не отображается в debugMessage Error Log
  • Задайте название активности ((Activity)getContext()).setTitle(debugMessage)
    • Нет эффекта
  • Установить заголовок окна с помощью ((Activity)getContext()).getWindow().setTitle(debugMessage)
    • NullPointerException ( window равно null )
  • Добавить TextView динамически

     final TextView textView = new TextView(getContext()); textView.setText(debugMessage); this.addView(textView); 
    • debugMessage но мой макет разрушен
    • Работает только в том случае, если пользовательский вид представляет собой ViewGroup

Solutions Collecting From Web of "Отладка пользовательского вида в редакторе графических макетов ADT"

Хороший вопрос! Мне интересно то же самое. Наличие хорошего предварительного просмотра в редакторе макетов действительно очень сложно, и, похоже, довольно мало документации о том, что вы можете, и вы не можете сделать, когда «isineditmode» истинно (например, анализировать пользовательские XML-атрибуты во входящем атрибутном наборе на конструкторе Взглядов, похоже, не работает, и т. Д. И т. Д.).

У меня даже проблемы с поиском мнений по ID в пользовательском представлении. Простая вещь, как

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

После раздувания мой пользовательский макет представления возвращает null только при запуске макета из редактора (т. Е. Isineditmode () == true). При запуске приложения на телефоне он работает.

Я оставляю вас здесь, что помогло мне при попытке лучше просмотреть мои макеты в редакторе макетов:

1- Поиск представлений : я использую свойство TAG, так как функция findViewWithTag () работает в режиме редактирования. Поэтому я использую Id для TAG

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

А затем найдите представления, используя тег:

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

2- Проверка некоторых значений, чтобы знать, почему иногда мое настраиваемое представление не может быть создано в режиме редактирования или проверка того, могут ли какие-либо проверки быть запрошены в режиме редактирования и знать их значение . Я использую особый текст в родительском макете, в котором будет размещен мой пользовательский вид, и я оставляю его скрытым и специальным тегом:

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

Этот линейный макет будет родителем моего пользовательского представления, и тот, который мне нужно открыть в редакторе макета, чтобы просмотреть мой пользовательский вид. «Отладочный» текст visibilty «ушел», поэтому я не буду беспокоить, если не нужно. Затем, когда мне нужно проверить что-то, я делаю следующее в java-коде своего пользовательского представления:

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

В этом примере я проверяю свойство представления, например верхнее дополнение.

Важное примечание: вам нужно вручную преобразовать в String значение, которое будет отображаться в представлении «отладка», иначе оно сработает и даст вам ошибку.

Надеюсь, поможет.

И если у кого-то есть представление о том, почему поиск взглядов по id не работает, любая помощь будет оценена.

Я согласен, что это расстраивает. Для меня findViewWithTag () не работает, он всегда возвращает null в режиме предварительного просмотра ADT. Но я смог создать простой журнал для локального (не Android) файла и отлаживать его отладки моих пользовательских представлений, например, как показано ниже (это проверяет isEditMode, чтобы убедиться, что он не работает, если он случайно запущен на 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;