Пользовательские представления Android в Eclipse Visual Editor

В моих приложениях я часто полагаюсь на пользовательские представления сборки, такие как в следующем примере.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:background="@color/light_grey"
android:layout_height="match_parent" 
android:layout_width="fill_parent" >

<TextView 
 style="@style/CardTitle" 
 android:id="@+id/card_title"
 android:layout_height="wrap_content" 
 android:layout_width="fill_parent"      
 />  

<com.whiterabbit.cards.ui.AspectRatioImageView
    android:id="@+id/card_picture"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:layout_marginLeft="30dip"
    android:layout_marginRight="30dip"       
    android:src="@drawable/boss"
    />



<ListView 
    android:id="@+id/card_properties" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"

/>

Проблема в том, что я не знаю, как, если он будет отображаться правильно, пока я не запустил его на реальном устройстве или на эмуляторе. Более того, если я обнаружил что-то не так, мне пришлось бы внести в него изменения и снова развернуть приложение, чтобы посмотреть, сработали ли эти изменения, как вы ожидали.

Это может быть длительным и скучным процессом, особенно если приложению требуется некоторое взаимодействие, чтобы перейти к активности, которую вы хотите проверить.

Использование визуального редактора не работает, так как он не может загрузить пользовательское представление.

Есть ли другой способ проверить, как отображаются представления без запуска по всему приложению?

 fedepaol26 мая 2012 г., 17:47
Спасибо @Blundell за пересмотр моего вопроса

Ответы на вопрос(3)

которая загружает только тот вид, который вы хотите видеть, и наполняете его достаточным количеством данных, чтобы оно отображалось.

поэтому я не уверен, что этот ответ будет применим к вашему делу.

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

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // TODO: consider storing these as member variables to reduce
    // allocations per draw cycle.
    int paddingLeft = getPaddingLeft();
    int paddingTop = getPaddingTop();
    int paddingRight = getPaddingRight();
    int paddingBottom = getPaddingBottom();

    int w = getWidth() - paddingLeft - paddingRight;
    int h = getHeight() - paddingTop - paddingBottom;

    w = w<h ? w : h;
    h = w;

    // Draw the example drawable on top of the text.
    if (dieDrawable != null) {
        dieDrawable.setBounds(paddingLeft, paddingTop,
        paddingLeft + w, paddingTop + h);
        dieDrawable.draw(canvas);
    }
}

Этот метод работает как в эмуляторе, так и в дизайнере.

Он также работает для любого события, которое перерисовывает представление (onSizeChanged, onLayout и т. Д.)

Решение Вопроса

if(!isInEditMode()){
   // Your custom code that is not letting the Visual Editor draw properly
   // i.e. thread spawning or other things in the constructor
}

http://developer.android.com/reference/android/view/View.html#isInEditMode ()

Это позволяет скрыть код от средства просмотра XML подключаемого модуля ADT и, надеюсь, отобразить макет!

View.isInEditMode()

Indicates whether this View is currently in edit mode. A View is usually in edit mode when displayed within a developer tool. For instance, if this View is being drawn by a visual user interface builder, this method should return true. Subclasses should check the return value of this method to provide different behaviors if their normal behavior might interfere with the host environment. For instance: the class spawns a thread in its constructor, the drawing code relies on device-specific features, etc. This method is usually checked in the drawing code of custom widgets.

Ваш ответ на вопрос