21

Android 開発で最も面倒な部分の 1 つは、レイアウト ビルダーを使用した場合でも、レイアウトの設計であることに気付きました。

グラフィックを設定してからレイアウトを設定した後、次のように変数をレイアウト要素に関連付けるのは非常に面倒です。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を使用していますが、非常に便利です

4

5 に答える 5

35

レイアウト XML とプログラム ロジックを結び付ける Java コードを自動的に生成するツールを作成しました。

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

ここで見つけることができます: Android Layout Finder | バズるアンドロイド

于 2013-02-15T14:17:40.850 に答える
2

Androidスタジオのバージョン3.6以降、XMLレイアウトファイルごとにバインディングクラスを生成する自動的にビューバインディングのサポートが正式に追加されました。これらのクラスには、対応するレイアウトに ID を持つすべてのビューへの直接参照が含まれています。

ファイルを変更することで有効にできbuild.gradleます。

android {
  ...
  viewBinding {
      enabled = true
  }
}

モジュールでビュー バインディングが有効になっている場合、モジュールに含まれる XML レイアウト ファイルごとにバインディング クラスが生成されます。各バインディング クラスには、ルート ビューと ID を持つすべてのビューへの参照が含まれています。

たとえば、 というレイアウト ファイルがある場合、result_profile.xml生成されたバインディング クラスは と呼ばれResultProfileBindingます。

例:

private ResultProfileBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ResultProfileBinding.inflate(getLayoutInflater());
    View view = binding.getRoot();
    setContentView(view);
}

こちらの公式ドキュメントを確認してください。

于 2020-03-02T15:30:58.060 に答える
0

それは機能要求です。これは非常に優れたものであり、非常に役立つと思います。一方、ビューを動的に膨張させていて、コンパイル時に特定のアクティビティがどのビューを膨張させるかわからない場合など、うまく機能しない場合があります。ただし、このケースは規則ではなく例外であると考えがちです。

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

スクリプトで処理すると、クラスが生成されます。

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

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

次に、その基本クラスから単純に継承して、コンポーネントを使用できます...

スクリプト アプローチはシンプルで、ツールチェーンのコードを詳しく調べる必要はありませんが、ADT プラグインで直接行うこともできます。

于 2011-08-02T04:14:24.850 に答える