Подтвердить что ты не робот

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

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


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

4b9b3361

Ответ 1

Хороший вопрос! Мне интересно то же самое. Наличие хорошего предварительного просмотра в редакторе макетов действительно очень сложно, и, похоже, это довольно небольшая документация о том, что вы можете, и вы не можете сделать, когда "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>

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

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

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

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

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

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

Ответ 2

Я согласен, что это расстраивает. Для меня 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;