Custom Android Views in Eclipse Visual Editor

In my applications, I often rely on custom build views, such as in the following example.

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

/>

  • How to hide the horizontal line at the bottom of each item in android listview?
  • Show Image View from file path?
  • monodroid/xamarin custom attributes are empty using ObtainStyledAttributes
  • Android Design Support Library Fab menu
  • Interfacing Android Nexus One with Arduino + BlueSmirf
  • How can I allocate more than 1024 MB RAM on AVD?
  • The problem is, I don’t know how if it will be displayed correctly until I run it on a real device or on the emulator. Moreover, if I found something wrong I would have to perform changes on it and deploy the app again to see if the changes worked as you expected.

    This can be a long and boring process, especially if the application requires some interaction to get to the activity you want to check.

    Using the visual editor doesn’t work as it cannot load the custom view.

    Is there another way to check how views are displayed without running across the whole application?

    Related posts:

    Error inflating class RecyclerView
    Strange webview black blinking when scrolling
    How to read/write preferences from a DialogFragment?
    How to call a method in activity from a service
    Android radial gradient
    How to resolve a library conflict (apache commons-codec)
  • Disable on click highlight of InfoWindows?
  • Life cycle of Android Activity after pressing Back button
  • Syncing a REST service with an android app
  • Pausing/stopping and starting/resuming Java TimerTask continuously?
  • how to create custom UI for android MediaController
  • Android support lib v4 or v13
  • 3 Solutions collect form web for “Custom Android Views in Eclipse Visual Editor”

    You can do this in your Custom View:

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

    This allows you to hide code from the ADT Plugin XML Viewer and hopefully display you a layout!

    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.

    You could create a skeleton activity that loads just the view you want to see and populate it with enough data to make it display.

    I’m using Android Studio so I’m not sure this answer will apply to your case.

    I think you could override onDraw method in the custom view, like this exemple keeping the aspect ratio of an inner image:

    @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);
        }
    }
    

    This method runs both in the emulator and the designer.

    It runs as well for any event that redraws the view (onSizeChanged, onLayout, etc…)

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.