2012-05-24 15 views
11

私のアプリケーションでは、次の例のようなカスタムビルドビューに依存することがよくあります。 EclipseビジュアルエディタのカスタムAndroidビュー

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

/> 

問題がある

、私は実際のデバイスまたはエミュレーター上で実行されるまで、それが正しく表示されます場合、私は方法がわかりません。さらに、私が何か間違ったことが見つかった場合は、変更を加えて、アプリケーションが再び展開され、期待通りの変更が行われたかどうかを確認する必要があります。

これは、特にアプリケーションが確認したいアクティビティにアクセスするために何らかのやりとりを必要とする場合、長くて退屈なプロセスです。

ビジュアルエディタを使用すると、カスタムビューを読み込めないため、機能しません。

アプリケーション全体でビューを表示せずに表示する方法を確認する別の方法はありますか?

+0

(... onSizeChanged、onLayout、など)のビューを再描画任意のイベントのためだけでなく走る私の質問を改訂してくれてありがとう@Blundellを – fedepaol

答えて

54

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

これは、あなたは、ADTプラグインXMLビューアからコードを隠し、うまくいけばあなたのレイアウトを表示することができます!

View.isInEditMode()

は、このビューは、現在編集モードであるかどうかを示します。表示は開発者ツール内に表示されたときに通常編集モードの です。 インスタンスの場合、このビューがビジュアル・ユーザー・インタフェースの ビルダに​​よって描画されている場合、このメソッドはtrueを戻す必要があります。サブクラスは、 の正常な動作がホスト環境を妨害する可能性がある場合は、異なる動作を提供するために、このメソッドの戻り値を で確認する必要があります。 インスタンスの場合:クラスはそのコンストラクタでスレッドを生成します。描画は コードはデバイス固有の機能などに依存します。このメソッドは通常、カスタムウィジェットの描画コードで をチェックします。

0

表示したいだけのビューを読み込んで、十分なデータを表示して表示させるスケルトンアクティビティを作成することができます。カスタムビューでこれを行うことができます

0

私はAndroidスタジオを使用していますので、この回答があなたのケースに当てはまるかどうかはわかりません。

私はこのexempleは、内側の画像のアスペクト比を維持するようにあなたは、カスタムビューでメソッドをオーバーライドする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); 
    } 
} 

このメソッドは、エミュレータとデザイナーの両方で動作します。

それは

関連する問題