コンテキストとオプションメニューを使う
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;
}
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
view
Androidのアプリを開発する
上で使う部品のことで、
トリガボタン・イメージボタン
チェックボックスなどのこと。
UI
ユーザインターフェースのこと。
|