あなたが提案する各方法は、再利用可能なユーザーインターフェイスを作成するために不可欠であり、それぞれに異なる用途があります。
まず、レイアウトはユーザー インターフェイスの視覚的な構造を定義するだけであり、アクティビティとフラグメントはその視覚的な構造がどのように機能するかを定義するコンポーネントです。これにより、視覚的な構造とユーザー インターフェイスの動作が明確に分離されます。
したがって、<include/>
タグは、定義されたビジュアル構造を再利用するために使用されます。この視覚的構造は任意のレイアウトに含めることができますが、各アクティビティまたはフラグメントは、その視覚的構造が個別にどのように動作するかを定義できます。
再利用可能な動作を作成するために、 をサブクラス化できますActivity
。例えば; aFragmentActivity
は、クラスで定義された動作を保持しますが、Activity
1 つ以上のフラグメントを格納する機能を追加します。サブクラス化するすべてのクラスも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
(拡張されます) 。FragmentActivity
Support 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
含まれるファイルを作成するだけです。layout
Activity
<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
ます:Activity
BaseActivity
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
ない限り、それぞれが独自のレイアウトを で定義する必要があるためです。はコンテンツ ビューが設定されるまで使用できないため、この方法で各アクティビティに個別にアクション バー (アプリ バー) を設定する必要があります。Activity
Activity
setContentView()
Toolbar