カテゴリー:
Android Studio ではじめる Android プログラミング入門 第3版 Android Studio 2対応
閲覧数:338 配信日:2018-04-20 14:02
オプションメニュー
アプリ画面の上部にある「アクションバー」をタッチすると表示されるメニュー
・Android端末のメニューボタン(機器に付いているハードウェアのボタン。ハンバーガーメニュー)を押すと、画面にポップアップして現れるメニュー
・Activityの機能として組み込まれており、Activityに用意されているイベントを利用して簡単に実装できる
・Activityクラスにある「onCreateOptionsMenu」メソッドをオーバーライドして作成
オプションメニューはどのメニューを選択しても、onOptionsItemSelectedメソッドが呼び出される
・その中で「どれを選んだか」をチェックし、分岐処理するのが基本
「res」フォルダ上で右クリックし、「Android Resource Directory」をクリック
・ここで「menu」フォルダを作成し、「main.xml」ファイルを作成
・「Resource Type」を「menu」に変更して「OK」をクリック
・作成した「menu」フォルダ上で右クリックし、「file」をクリック
・開いた「New File」でファイル名を入力
・menu_main.xmlというXMLファイルを作成
・作成したmain.xmlにオプションメニューのレイアウトを作成
menuタグ
・オプションメニューを表示するための要素
・1つ以上のitemタグを保持
・オプションメニューを表示する
res/values/strings.xml
MenuInflater
・メニュー生成を行うための機能を提供するクラス
・Activityには、「そのActivityで使うメニューを生成するためのMenuInflaterインスタンス」が組み込まれている
R
・Androidに用意されている「各種XMLファイルを参照する値」をstaticフィールドとしてまとめてあるクラス
メニューのリソースを指定する値
・R.menu.activity_mainで設定されている
R.meu.activity_main
・Rクラスの「menu」内部クラスにあるmainフィールド
→「res」フォルダの「menu」フォルダにあるactivity_main.xml(ここではmenu_main.xml)ファイルが示す値
MainActivity.java
package work.w4c.android0.androidtoast20180420;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
static final String MENU_ITEM = "menu item";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.add(MENU_ITEM);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (MENU_ITEM.equals(item.getTitle())){
Toast toast = Toast.makeText(this,"Hello, Toast!!",
Toast.LENGTH_LONG);
toast.show();
}
return super.onOptionsItemSelected(item);
}
}
回答を得られなかったQ
onCreateOptionsMenuで、エラー: シンボルを見つけられません
MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
//中略
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
・下記エラーになります
エラー: シンボルを見つけられません
シンボル: 変数 menu
場所: クラス R
・「res」フォルダに「menu」がないのですが、これは自分で作成するのでしょうか?
・「run」したら自動で作成されるのかな、と思っていたのですが、
・それとも何かバージョンの問題ですか?