テクパー2020
テクニカルヘルパー


 アンドロイドアプリ開発  

◆ オプションメニューの配置
・ MENUボタンによりオプションメニューを呼び出します
・ オプションメニューのイベントでメニュー項目の機能を指定します
・ メニュー項目のイメージはICON画像を借用します

【 実行 】
【 MENUを押す 】



【 メニューAを押す 】



【 メニューAの確認 】


【 MENUを押す 】
【 メニューBを押す 】



【 メニューBの確認 】



【 MENUを押す 】


1.新規プロジェクトで 「 ToolsMenu 」 を新規に作成します

1)ファイル(F) → 新規(N) → プロジェクト(P)

2)Android の Android プロジェクト を選択し、[次へ(N)]ボタン をクリック
・プロジェクト名に 「 ToolsMenu 」 を入力
・ビルド・ターゲットの □ Android 2.2 を チェック (最新のバージョン)
・アプリケーション名に 「 ToolsMenu 」 を入力
・パッケージ名に 「 任意のドメイン名 」 を入力 (ドメイン名をパッケージ名に利用)
・□ Create Activityがチェック状態で、名称に 「 ToolsMenu 」 を入力
・[完了]ボタン をクリック

(プロジェクトの構成)



2.「 ToolsMenu 」 を書き換え
package com.proto.toolsmenu;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class ToolsMenu extends Activity {

    private final static int MatchParent=LayoutParams.MATCH_PARENT;
    private final static int WrapContent=LayoutParams.WRAP_CONTENT;

    private static final int MENU_ITEM_ID_A=Menu.FIRST+1;
    private static final int MENU_ITEM_ID_B=Menu.FIRST+2;
    private static final String MENU_TITLE_A="メニューA";
    private static final String MENU_TITLE_B="メニューB";
    private boolean menuEnabledA=true;
    private boolean menuEnabledB=true;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        // setContentView(R.layout.main); 書き換え

        // ウィンドウタイトルの非表示
        // requestWindowFeature(Window.FEATURE_NO_TITLE);

        // レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setBackgroundColor(Color.LTGRAY);   // 背景色の指定
        layout.setOrientation(LinearLayout.VERTICAL);  // HORIZONTAL, VERTICAL 
        setContentView(layout);

        // テキストの生成
        TextView txtView;
        txtView = new TextView(this);
        txtView.setTextColor(Color.MAGENTA);
        txtView.setTextSize(16f);
        txtView.setText("リスト表示のチェック");
        layout.addView(txtView,
                       new LinearLayout.LayoutParams(WrapContent,WrapContent));

        txtView = new TextView(this);
        txtView.setTextColor(Color.BLUE);
        txtView.setText("[ メニュー ]ボタンを押してください!!");
        layout.addView(txtView,
                       new LinearLayout.LayoutParams(MatchParent,MatchParent));

    }

    // オプションメニューの生成(MENUボタンが押されたとき)
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // メニューアイテムの追加(付属のICON画像を借用)
        menu.add(Menu.NONE,MENU_ITEM_ID_A,Menu.NONE,MENU_TITLE_A)
                                              .setIcon(R.drawable.icon);
        menu.add(Menu.NONE,MENU_ITEM_ID_B,Menu.NONE,MENU_TITLE_B);

        return super.onCreateOptionsMenu(menu);

    }

    // オプションメニューの表示イベント
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        // menu.findItem(MENU_ITEM_ID_A).setVisible(visible);
        menu.findItem(MENU_ITEM_ID_A).setEnabled(menuEnabledA);
        menu.findItem(MENU_ITEM_ID_B).setEnabled(menuEnabledB);

        return super.onPrepareOptionsMenu(menu);

    }

    // オプションメニューの選択イベント
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        boolean ret = true;

        switch (item.getItemId()) {
        case MENU_ITEM_ID_A:
            menuEnabledA=false;
            menuEnabledB=true;
            Toast.makeText(
                ToolsMenu.this, MENU_TITLE_A+"の選択",Toast.LENGTH_LONG).show();
            ret = true;
            break;

        case MENU_ITEM_ID_B:
            menuEnabledB=false;
            menuEnabledA=true;
            Toast.makeText(
                ToolsMenu.this, MENU_TITLE_B+"の選択",Toast.LENGTH_LONG).show();
            ret = true;
            break;

        default:
            //ret = super.onOptionsItemSelected(item);
            break;
        }

        return ret;

    }

    // テキストの通知
    public void toastText(String strText) {
        Toast.makeText(this,strText,Toast.LENGTH_LONG).show();
    }
}


・機能の説明
android.widget.LinearLayout の LinearLayoutクラスの生成

public LinearLayout (Context context) 

// レイアウトの向きの指定(HORIZONTAL :水平{デフォルト}, VERTICAL:垂直)
public void setOrientation (int orientation) 
android.app.Activity の Activityクラスのオーバーライド

// MENUが押されたとき
public boolean onCreateOptionsMenu (Menu menu) 
オプションメニューの初期化で、メニュー項目を配置します

// オプションメニュー表示のとき
public boolean onPrepareOptionsMenu (Menu menu) 
メニュー項目の機能を指定します

// オプションメニューの項目選択のとき
public boolean onOptionsItemSelected (MenuItem item) 
android.app.View の Menuインターフェースのオーバーライド

// メニューに追加
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
 int groupId : メニュー項目のグループ化のID(グループを使用しない場合、Menu.NONE)
 int itemId : メニュー項目の識別ID
 int order : メニュー項目の配置順(追加順の場合、Menu.NONE)
 CharSequence title : メニュー項目の表示タイトル
android.widget.Toast の Toastクラスで指定

// トースト(瞬間表示)の作成(コンテキスト, 表示テキスト, 文字長指定)
public static Toast makeText (Context context, CharSequence text, int duration) 
文字長指定(LENGTH_SHORT or LENGTH_LONG)


3.プロジェクトの実行(実行構成の作成は、「プロジェクトの新規作成」を参照)
※ 実行(R) で はオプションメニューは表示されません。
MENUボタンを押します 実行のイメージはここから!

Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.