2.2 actionボタンの追加

12679 ワード

http://developer.android.com/training/basics/actionbar/adding-buttons.html
要約:
1レレス/menuに追加
2 activityのonCreateOptionsMenuメソッドにアイコンを搭載する
3 activityのOptionsItem Selected方法でactionに対する応答を実現します。
actionボタンを追加
開発者は、actionバーで自分のアプリケーションソフトのために、動作コンテキスト環境で最もよく使われるショートカットボタンの一連を追加することができます。これらはactionバーでアイコンまたはテキストとして表示される要素をactionボタンといいます。その他のいくつかのactionバーの空間または重要性が低い機能はactionスタックに隠れています。
【図1】searchボタンとactionスタック(通常はいくつかの追加の操作ボタンを含む)のactionバーを含む。
XMLを使ってactionを作成します。
すべてのactionボタンと他のactionスタックに含まれる項目は、res/menuのXMLファイルに定義されているので、actionバーにactionを追加するためには、まずこのディレクトリの下にXMLファイルを作成しなければならない。
actionバーに追加する必要がある項目ごとに、対応する項目を作成する必要があります。例えば、
res/menu/main_activityactions.xml
 xmlns:android="http://schemas.android.com/apk/res/android" > 
     
     android:id="@+id/action_search" 
          android:icon="@drawable/ic_action_search" 
          android:title="@string/action_search" 
          android:showAsAction="ifRoom" /> 
     
     android:id="@+id/action_settings" 
          android:title="@string/action_settings" 
          android:showAsAction="never" /> 
上のコードセグメントは、searchボタンがactionバーに十分な空間があるときにactionボタンとして表示され、settingボタンはactionスタックにのみ含まれていると宣言しています。デフォルトでは、すべてのボタンがactionスタックに含まれていますが、言語表示で説明すれば、開発者の設計意図がより分かります。
icon属性はイメージのリソースIDを指定する必要があります。@drawable/後の名前は、res/drawableのパスの下に保存されているbitmapパターンファイルに対応する必要があります。例えば、「@drawable/icalアクション」はic curchを指します。action_search.png同様に、title属性は、res/value経路の下の1つのxmlファイルで定義されるstringリソースを使用している(簡単なユーザーインターフェースの作成を参照)。
注意:アプリケーションソフトウェアのためにグラフや他のビットマップファイルを作成する場合、開発者は異なる画面解像度のために異なるグラフィックファイルを提供して、最適な表示効果を達成することができます。関連情報はサポート画面の違いを参照してください。
アプリケーションがAndroid 2.1バージョンのサポートライブラリと互換されている場合、showAction属性はAndroidによってサポートされるのではなく、サポートライブラリによって提供されるので、開発者は自分でXML名前空間を定義し、この名前空間を属性のプレフィックスとして使用しなければならない。(カスタマイズされたXML名前空間は任意の名前を使用することができ、明らかにしたファイルの範囲内でのみ見られますが、開発者はアプリケーション名に基づいてカスタマイズされた名前空間に名前を付けることを推奨します。)
res/menu/mainctivity.xml
 xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 
     
     android:id="@+id/action_search" 
          android:icon="@drawable/ic_action_search" 
          android:title="@string/action_search" 
          yourapp:showAsAction="ifRoom"  /> 
    ... 
actionをactionバーに追加します。
目次の項目をactionバーに追加するには、activityのために、メニューリソースを指定されたメニューオブジェクトにロードする関数onCreateOptionsMenu()が必要です。
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu items for use in the action bar 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_activity_actions, menu); 
    return super.onCreateOptionsMenu(menu); 
}
応答actionボタン
ユーザーがactionボタンまたはactionスタックのいずれかの項目をクリックすると、システムはactivityのOptionsItem Selected()コールバック関数を呼び出します。この関数の実現において、パラメータMenuItemのgetItemId()方法により、現在押されているのはどの項目ですか?
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle presses on the action bar items 
    switch (item.getItemId()) { 
        case R.id.action_search: 
            openSearch(); 
            return true; 
        case R.id.action_settings: 
            openSettings(); 
            return true; 
        default: 
            return super.onOptionsItemSelected(item); 
    } 
}
下部のactivityにUpボタンを追加します。
すべての非アプリケーション・ソフトウェアのメインインターフェースのユーザーインターフェース(非「ホーム」activity)は、ユーザーにactionバーでUpボタンを提供するべきであり、このボタンを通じてユーザはアプリケーションの上位インターフェースに素早く戻ることができる。
アプリケーションがAndroid 4.1(API Level 16)またはより高いバージョンで実行される場合、またはサポートライブラリのActivityを使用して、Upボタンの高速ナビゲーション機能を実現するにはリストファイルでactivityに対応する上位activityを宣言して、actionバーでUpボタンを押すだけでいいです。
たとえば、下記のコードはどのようにリストファイルの中でactivityの上級activityを声明するかを示します。
 ... > 
    ... 
     
     
        android:name="com.example.myfirstapp.MainActivity" ...> 
        ... 
     
     
     
        android:name="com.example.myfirstapp.DisplayMessageActivity" 
        android:label="@string/title_activity_display_message" 
        android:parentActivityName="com.example.myfirstapp.MainActivity" > 
         
         
            android:name="android.support.PARENT_ACTIVITY" 
            android:value="com.example.myfirstapp.MainActivity" /> 
     
次に、set DisplayHomeAsUpEnbaled()を呼び出すことにより、Upボタンを押すことができます。
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_displaymessage); 
 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    // If your minSdkVersion is 11 or higher, instead use: 
    // getActionBar().setDisplayHomeAsUpEnabled(true); 
}
このように、MainActivityはDisplayMessage Activityの上位activityであることがシステムで分かり、ユーザーがUpボタンを押すと、システムは自動的にユーザーをMainAcitivyの表示画面に誘導し、開発者がUpボタンのイベントを追加的に処理する必要がない。