サポートライブラリを備えたAndroid 2.1以降のActionBar。 パート3-便利な機能

すべての人に良い一日を!



うーん、私は長い間、Habrに関する記事を書きませんでした。 まあ、私はこの問題を修正します。

一般に、AndroidのActionBarは非常に複雑なものです。 最初2番目の部分では、その主な機能(メニューとナビゲーション)のみを調べました。 ただし、その他にも多数あります:スプリットアクションバー、メニュー項目のカスタムビュー、ActionProvider。 それらについて、そして議論されます。 さらに、ボーナス:多くの人は、[上へ]ボタンが前のアクティビティに移動することを知っています。 ただし、他の1つのアクティビティのみで画面にアクセスできる場合、遷移をコーディングすることはできません。 興味がありますか? 猫をお願いします。



分割アクションバー









Split ActionBarは、画面の下部にあるメニュー項目のあるバーです。 ActionBarの大部分がスペース不足(中央)であるか、欠落している(右側)場合に使用できます。 追加は簡単です。マニフェストファイルにアクティビティまたはアプリケーション全体に対して次の行を追加するだけです。



<manifest ...> <activityuiOptions="splitActionBarWhenNarrow" ... > // API 14+ <meta-data android:name="android.support.UI_OPTIONS" //  Support Library API 7+ android:value="splitActionBarWhenNarrow" /> </activity> </manifest>
      
      







上のActionBarを削除するには(右図のように)、ActionBarメソッドsetDisplayShowHomeEnabled(false)およびsetDisplayShowTitleEnabled(false)を呼び出す必要があります。



Actionview





デフォルトでは、メニュー項目は画像(アイコン)のように見えます。 変更するには2つの方法があります。

-actionLayout属性をタグに追加します。 入力としてレイアウトファイルへのリンクを受け入れます。

-標準ビューの代わりに使用する、クラスの名前、ビューの継承元を書き込むタグのactionViewClass属性を追加します



 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/custom_action " android:title="@string/custom_action " android:icon="@drawable/ic_custom_action " yourapp:actionViewClass="com.you.app.CustomView" /> </menu>
      
      







androidネームスペースの古いバージョンにはこれらの属性がないため、サポートライブラリネームスペースを使用する必要があります。これを行うには、行xmlns:yourapp = "schemas.android.com/apk/res-auto"を追加し、 yourapp:actionViewClass属性を使用します 。 MenuItemCompat setActionView(MenuItem item、int resId)およびsetActionView(MenuItem item、View view) メソッドを使用して、MenuItemのレイアウトをプログラムで変更し、現在のView- getActionView(MenuItem item)を取得できます



ActionViewの例の1つにSearchViewがあります 。これについては、 ここで詳しく説明します



アクションプロバイダー









ActionProviderはActionViewと多くの共通点を持っています。 また、ボタンを独自のレイアウトに置き換えますが、ドロップダウンリストを表示し、メニュー項目の動作を制御できます。 これをメニュー項目に設定するには、タグが属性actionProviderClassを追加するだけで十分です。ここにクラスのアドレスを書き込みます。 ActionProviderを継承し、次のメソッドをオーバーライドする必要があります。

-ActionProvider (コンテキストコンテキスト) -コンストラクター。入力コンテキストを取得します。入力コンテキストは、他のメソッドで使用するためにクラスフィールドに保存する必要があります。

-onCreateActionView (MenuItem) -ここでは、コンテキストから取得したLayoutInflaterを使用してメニュー項目のビューを作成し、それを返します。

-onPerformDefaultAction() -ユーザーがActionBarのアイテムをクリックすると呼び出されます。



ActionProviderを使用する場合、 onOptionsItemSelected()でクリックすることを適切に処理しないでください。そうしないと、 onPerformDefaultAction()が呼び出されないため、そこでfalseを返します。



ActionProviderにサブメニューが表示される場合、 hasSubMenu()メソッドをオーバーライドしてtrueを返す必要があります。 次に、 onPerformDefaultAction()の代わりに onPrepareSubMenu(SubMenu subMenu)が呼び出されます。 そこでサブメニューを作成または変更します。



ShareActionProvider





Androidには、コンテンツを送信するための独自のActionProvider- ShareActionProviderがあります。 それを使用してメニューを作成する場合、 MenuItemCompat.getActionProvider(MenuItem)を使用してonCreateOptionsMenuメソッドでそのインスタンスを取得し、 setShareIntent()を呼び出す必要があります。



 private ShareActionProvider mShareActionProvider; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); Intent share_intent = new Intent(Intent.ACTION_SEND); intent.setType("image/*"); mShareActionProvider = (ShareActionProvider) getActionProvider(menu.findItem(R.id.action_share)); mShareActionProvider.setShareIntent(share_intent); return super.onCreateOptionsMenu(menu); }
      
      







画面上のコンテンツは変化する可能性があるため(たとえば、写真をめくる)、コンテンツが変化するたびにsetShareIntent()を呼び出す必要があります。



親の活動





アプリケーションの画面にアクセスできるアクティビティが他に1つしかない場合は、ActionBarのUpボタンを押して画面への自動遷移を設定するのが理にかなっています。 これを行うのは非常に簡単です。目的のアクティビティのマニフェストファイルに行を追加します。



 <application ... > <activity android:name="com.you. app.MainActivity" ...> //  Activity ... </activity> ... <activity android:name="com.you. app.DetailsActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > // API 16+ <meta-data android:name="android.support.PARENT_ACTIVITY" //  Support Library API 7+ android:value="com.you. app.MainActivity" /> </activity> </application>
      
      







HomeボタンがUpのように機能することを思い出させてください; SupportActionBar setHomeButtonEnabled(true)およびsetDisplayHomeAsUpEnabled(true)メソッドを呼び出します。



API 11+の場合
アプリケーションがAndroid 3以降のみをサポートしている場合、MenuItemCompatメソッドの代わりに、SupportActionBar-ActionBarの代わりにMenuItemに同様のメソッドを使用する必要があります。 また、メニューのすべての属性はandroid:で始まり、 xmlns:yourapp = http://schemas.android.com/apk/res-autoの行は不要です。





すべての情報はここから取得されます (英語の公式ガイド)。



パート1-プロジェクトへのサポートライブラリの追加、簡単な例、検索

パート2-タブとドロップダウンリストでナビゲートする



All Articles