ウェブアプリケーション,インジェクション,コマンドインジェクション

Androidアプリ開発 Viewをつかったインターフェースデザイン

コンテキストとオプションメニューを使う

Displaying Context and Options Menus

メニューは追加のオプションを表示するのに役立つもので、
アプリケーションのメインUI上に直接見えないものです。
Androidには2つのメニューの主な型が付けられます。

●オプションメニュー
現在のアクティビティと関連した情報を表示します。
Androidでは、Menuキーを押すことでメニューオプションを開きます。
メニューアイテムは、現在動いているアクティビティに沿って
様々に表示されます。

●コンテキストメニュー
アクティビティの特定のViewに関連した情報を表示します。
Androidでは、コンテキストメニューをタップしたり、
ホールドしたときに開きます。
ここでは、開発するAndroidアプリケーションにオプションメニューと
コンテキストメニューをどのように作るかを紹介します。
オプションメニューとコンテキストメニューのどちらかを作るために、
res/menuフォルダにあるactivity_main.xmlファイルを
以下のようにします。

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

   <item
     android:id="@+id/menu1"
     android:icon="@drawable/ic_action_search"
     android:orderInCategory="100"
     android:showAsAction="always"
     android:title="Item 1" />

   <item
     android:="@+id/menu2"
     android:orderInCategory="100"
     android:showAsAction="ifRoom"
     android:title="Item 2 />
     <menu>
       <item
         android:id="@+id/menu21"
         android:title="Item 2.1" />
       <item
         android:id="@+id/menu22"
         android:title="Item 2.2 />
       <item
         android:id="@+id/menu23"
         android:title="Item 3.2" />
     </menu>
   </item>
   <item
     android:id="@+id/menu3"
     android:orderInCategory="100"
     android:showAsAction="never"
     title="Item 4" >
     <menu>
       <group
         android:id="@+id/group"
         android:checkableBehavior="single" >
         <item
           android:id="@+id/group_item1"
           android:onClick="onGroupItemClick"
           android:title="Red" />
         <item
           android:id="@+id/group_item2"
           android:onClick="onGroupItemClick"
           android:title="Green" />
         <item
           android:id="@+id/group_item3"
           android:onClick="onGroupItemClick"
           android:title="Blue" />
       </group>
     </menu>
   </item>
<menu>

上のコードは、以下のものをつくっています。
●4つの主なメニューアイテムを<item>要素で示しています。
●2番目のメニューアイテムは、3つのアイテムのサブメニューを
  (<menu>で示しています)もっています。
●4番目のメニューアイテムは、3つのラジオボタンのサブメニューを
  (<group>要素で示しています)もっています。
そして、res/layoutフォルダにあるactivity_main.xmlファイルに
以下のようなコード部があるとします。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >

   <TextView
     android:id="@+id/textView"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layour_centerVertical="true"
     android:text="@string/hello_world"
     context=".MainActivity" />

   <Button
     android:id="@+id/button1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_below="@+id/textView1"
     android:layout_centerHorizontal="true"
     android:text="Click and hold on this button" />
<RelativeLayout>

以下のコードはアクティビティにオプションとコンテキストを
示せるようにできます。

package net.learn2develop.contextandoptionmenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity{

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

     Button btn = (Button) findViewById(R.id.button1);
     btn.setOnCreateContextMenuListener(this); }

   //---Options Menu---
   public boolean onCreateOptionMenu(Menu menu){
     getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;}

   public void onGroupItemClick(MenuItem item){
     if (item.isChecked()){
       item.setChecked(false);
     }else{
       idtem.setChecked(true);
     }
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item){
     Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
     return true;}

   //---Context Menu---
   @Override
   public void onCreateContextMenu(ContextMenu menu, View view,
     ContextMenuInfo menuInfo){
       getMenuInflater().inflate(R.menu.activity_main, menu);
     }

   @Override
   public boolean onContextitemSelected(MenuItem item){
     Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
     return true;
   }
}

アクティビティが最初にロードされた時に、
onCreateOptionMenu()メソッドを呼び出します。
そこで、res/menuフォルダにあるactivity_main.xmlファイルに
含まれているメニューを表示します。
アクティビティのメニューバーには2つのメニューアイテムが入ってます。

●検索メニューアイテム
このアイコンは、<item>要素にあるandroid:icon属性で
セットさせます。通常、android:showAsAction属性に"always"を
セットすることで指定されたら、アクションバーに示されます。

●ITEM2
このメニューアイテムは、android:showAsAction属性に
"ifRoom"がセットされたら、アクションバーの空間にいつでも
表示されます。

3番目のメニューはアクションバーに表示されません。
これは、android:showAsAction属性の値に"never"が
セットされているためです。
4番目のメニューアイテムがアクションバーに現れないのは、
他のアイテムのためにアクションバーに利用できる空間が
無いためです。
ITEM2をクリックすることでも、3つのメニューアイテムを含む
サブメニューを現します。MENUボタンをクリックすることで、
3番目と4番目のメニューアイテムを出せます。
Item4をクリックしたら、ラジオボタンのメニューアイテムの
リストを出せます。
グループの中にある他のメニューアイテムをクリックしたときに、
(<group>要素で指定されてます)
onGroupItemClick()メソッドが動き出します。

public void onGroupItemClick(MenuItem item){
   if (item.isChecked()){
     item.setChecked(false);
   }else{
     item.setChecked(true);
   }
}

通常、選択された”チェックした/チェックしてない”の
アイテムが必要になると思います。
この例では、グループのandroid:checkableBehavior属性値に、
singleがセットされたため、
いつでもチェックさせられる1つのアイテムだけになります。
メニューアイテムが選択されたときに、
onOptionsItemSelected()メソッドが動き出します。

@Override
public boolean onOptionsItemSelected(MenuItem item){
   Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
   return true;
}

もし、アクティビティのボタンが長くクリックされたら、
コンテキストメニューとしてメニューが表示されるので、
この時にはonCreateContextMenu()メソッドが動き出します。

//---context menu---
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
     ContextMenuInfo menuInfo){
   getMenuInflater().inflate(R.menu.activity_main, menu);
}

コンテキストメニューのメニューアイテムが選択されたときは、
onContextItemSelected()メソッドが動き出します。

@Override
public boolean onContextItemSelected(MenuItem item){
   Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
   return true;
}
ホーム
便利堂ロゴ
inserted by FC2 system