2

私はアンドロイドが初めてで、やり取りできる再利用可能なUIピースを作成する方法を理解しようとしています。世の中にはいくつかのテクニックがあることは知っていますが、一方が他方よりも優れている場合や、それらすべてを同じ意味で使用できるかどうかはわかりません。誰かが違いを指摘できれば(または私が誤解していれば)、それはありがたいです。

  1. 新しいページを処理するフラグメントまたは fragmentActivity を作成します。このフラグメントは、必要に応じていつでも使用できますが、フラグメントのライフサイクルを処理するために特別な注意を払う必要があります。
  2. レイアウトとその他必要なものを含む基本クラスを拡張します。その後、他のクラスはこのベースを拡張し、ベース UI も表示して機能させることができます。
  3. を使用<include layout=...すると、UI の一部のみを再利用できます。これについては、そのレイアウトのロジックがどこに行くべきかわかりません。

私が求めているのは、これらのそれぞれの概要であり、悪影響を与えることなく、より快適な方を使用できるかどうかです.

Ps: これらは、すべてのページに配置できる再利用可能なナビゲーション バーを作成する場合や、異なるページすべてにヘルプ ボタンがある場合に使用します。

4

1 に答える 1

1

あなたが提案する各方法は、再利用可能なユーザーインターフェイスを作成するために不可欠であり、それぞれに異なる用途があります。

まず、レイアウトはユーザー インターフェイスの視覚的な構造を定義するだけであり、アクティビティフラグメントはその視覚的な構造がどのように機能するかを定義するコンポーネントです。これにより、視覚的な構造とユーザー インターフェイスの動作が明確に分離されます。

したがって、<include/>タグは、定義されたビジュアル構造を再利用するために使用されます。この視覚的構造は任意のレイアウトに含めることができますが、各アクティビティまたはフラグメントは、その視覚的構造が個別にどのように動作するかを定義できます。

再利用可能な動作を作成するために、 をサブクラス化できますActivity。例えば; aFragmentActivityは、クラスで定義された動作を保持しますが、Activity1 つ以上のフラグメントを格納する機能を追加します。サブクラス化するすべてのクラスもFragmentActivity、これらの各動作を保持します。

フラグメントは、 の再利用可能なセグメントとして開発されActivity、独自の視覚的構造と動作を定義できます。したがって、 のセクションの視覚的な構造と動作の両方を再利用できるようにしたい場合は、そのためにActivityを作成できますFragment。フラグメントもサブクラス化できます。これを使用して、拡張クラスの視覚的な構造、動作、またはその両方を変更できます。

再利用可能なインターフェースを作成する方法はこれだけではありません。再利用可能なリソース、ビュー、スタイル、またはアニメーションを定義して、モジュラー ユーザー インターフェイスを作成できます。これらのさまざまなコンポーネントをニーズに合わせて活用する方法を学ぶことは、Android 開発 (および一般的な開発) の大きな部分を占めます。


最後に、投稿スクリプトに対処します。各ページにヘルプ ボタンを含む再利用可能なナビゲーション バーを作成する方法。願わくば、これが再利用可能なインターフェイスを作成する簡単な方法を示し、それがそれほど困難な作業ではないことを願っています。

それぞれに再利用可能なヘルプボタンを実装する 1 つの方法は、基本クラスでオプション メニューとして使用できるリソースActivityを作成することです。menu

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/action_help" android:title="@string/action_help"
        android:icon="@drawable/ic_help_white_24dp" android:orderInCategory="100"
        app:showAsAction="ifRoom"/>

</menu>

次に、このメニュー リソースが基本クラス内でインフレートされます。を利用するために、基本クラスが拡張されますAppCompatActivity(拡張されます) 。FragmentActivitySupport Library

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.base, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case R.id.action_help:
                dispatchHelpIntent();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    protected void dispatchHelpIntent() {
        // Handle help options button
    }

}

これにより、ヘルプボタンのクリックを基本クラスで処理するか、子クラスをオーバーライドdispatchHelpIntent()して個別に処理することができます。onCreateOptionsMenu()子クラスでandをオーバーライドonOptionsItemSelected()して、メニューにさらに項目を追加することもできます。ここで行っているように、ヘルプボタンを保持するために、必ずsuper両方のメソッドを呼び出してください。

次に、再利用可能なナビゲーション バー (通常、Android ではアプリ バーと呼ばれます) を作成するには、各 のファイルにlayout含まれるファイルを作成するだけです。layoutActivity

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/app_bar"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
        android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/>

</android.support.design.widget.AppBarLayout>

次に、タグActivityを使用して、このレイアウトを他のレイアウトに含めることができます。<include/>

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent"/>

    <include layout="@layout/app_bar_base"/>

    <!-- Activity content goes here -->

</android.support.design.widget.CoordinatorLayout>

そして最後に、これを拡張するものに(「アクションバー」はアプリバーの古い用語です)として追加しActionBarます:ActivityBaseActivity

public class MainActivity extends BaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setupActionBar();
    }

    private void setupActionBar() {
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.setDisplayShowTitleEnabled(true);
        }
    }

}

でこれを行うことができない理由は、すべてが同じレイアウトを使用しBaseActivityない限り、それぞれが独自のレイアウトを で定義する必要があるためです。はコンテンツ ビューが設定されるまで使用できないため、この方法で各アクティビティに個別にアクション バー (アプリ バー) を設定する必要があります。ActivityActivitysetContentView()Toolbar

于 2016-08-10T17:21:19.903 に答える