2011-08-01 3 views
15

Android開発の最も面倒な部分の1つはレイアウトビルダーであってもレイアウト設計です。グラフィックスを設定した後Android:xmlのすべてのIDの変数を自動的に作成

が、その後、レイアウト要素と変数の関連付けを行うレイアウトは、そのような大規模なレイアウトでImageButton myButton = (ImageButton)findViewById(R.id.myButton);

として、非常に面倒である、これらはを追跡するために退屈得ることができます(の名前をリコール要素)、どんな種類の変数でも変数を追加する必要があります。

私はXMLで宣言されたすべてのIDが自動的に適切な変数と関連していた、そして、それらのデータ型のすべてがすでにそのクラス

に含まれていた場合には、わずかにこれを緩和するために、それは非常に便利であるが、何かがありますそれはすでにこれをしていますか?

例えば

私は

<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/myButton" android:id="@+id/myButton"></ImageButton> 

を書くならば、私はすでに、これは設定または要求する機能です

import android.ImageButton; 

ImageButton myButton; 

myButton = (ImageButton)findViewById(R.id.myButton); 

には、このレイアウトを含めたクラスをご希望ですか?私はEclipse IDEを使用しており、非常に便利です

+0

ではなく、私の知っているが、クールになること - 多分それを書くのか? :) – Jords

+0

確かに、私は自動コードリスナーを作ったことはありません...どうすれば始められますか? Android AVDのその部分もオープンソースになるでしょうか? – CQM

答えて

15

Android Annotationsを試してみてください。ボイラープレートコードを置き換えるための便利なアノテーションを提供します。

例えば

は、@ViewByIddocumentation参照:ちょうどそれは

EditText myEditText; 

TextView textView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    [...] 
    myEditText = (EditText) findViewById(R.id.myEditText); 
    textView = (TextView) findViewById(R.id.myTextView); 
} 
0

これは機能リクエストです。それはとても良いことだし、それはかなり役に立つと思う。一方、ビューを動的に膨張させ、コンパイル時に特定のアクティビティがどのようなビューを膨らませるのかを知らない場合など、うまくいきません。しかし、私はこのケースがルールではなく例外であると考える傾向があります。

これを行う最も簡単な方法は、レイアウトXMLファイルをスキャンしてIDを持つコンポーネントを検索し、適切な定義で.javaファイルを作成するスクリプトを作成することです。次に、これらの自動生成クラスからアクティビティを派生させることができます。このような何か:

クラスを生成し、スクリプトで処理する場合:

class FooBarLayoutActivityBase extends Activity ... { 
    protected ImageButton myButton; 

    FooBarLayoutActivityBase() { 
    myButton = (ImageButton)findViewById(R.id.myButton); 
    } 
} 

を次に、あなたは、単にコンポーネントを使用するために、その基本クラスから継承することができます...

スクリプトアプローチは簡単で、ツールチェーンのコードを掘り下げる必要はありませんが、ADTプラグインで直接行うこともできます。

+0

findViewById()メソッドはsetContentViewメソッドの呼び出し後にのみ機能しますので、コードは機能しません –

25
私は自動的に一緒にレイアウトXMLのプログラムロジックを結ぶためのJavaコードを生成するツールを作っ

を置き換え

@ViewById 
EditText myEditText; 

@ViewById(R.id.myTextView) 
TextView textView; 

注釈付きのフィールドを宣言します。

基本的にXMLレイアウトを採用し、必要なJavaコードをすべて瞬時に生成します。基本メンバー変数、ViewHolderパターン、ArrayAdapter、CursorAdapter、RoboGuiceコードタイプがサポートされています。

あなたはここでそれを見つけることができます:Android Layout Finder | Buzzing Android

+0

回答を投稿していただきありがとうございます! [自己プロモーションに関するよくある質問](http://stackoverflow.com/faq#promotion)をよく読んでください。また、自分のサイト/製品にリンクするたびに免責条項を掲示することが必須*であることにも注意してください。 –

+2

その本当に良い@JesperB .....私はそれを使用していると本当に有用です... – SK16

+0

素敵な仕事!私はこれをすべての友達に見せます:D –

関連する問題