スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【プログラミング】Android - コンテキストメニュー

2011/06/11 (土) 22:02

公開中のアプリの追加機能のネタを模索中に調べたことをメモ。

コンテキストメニューの仕込み方とイベントの設定の仕方を少々解説。

結論としては、アクティビティに対して設定を行うメソッドがあるのでオーバーライトする。
それが

public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

これ。
最初は仕組みが良く分からず四苦八苦。
そもそも仕込みたいのはボタンとかエディットテキストなのに、なんでアクティビティにセットすんねん?
実際に動かしてみたところ、このメソッドはボタンとかエディットテキストが長押しされる度に呼ばれていた。
そーゆー事か。要するに、毎度メニューを作り直しているということかしらね。
ただし、事前に(onCreate でするのが普通か?)対象の View に対して

public void registerForContextMenu (View view)

をしておかなければならない。

オーバーライトするし、onCreate なんて頭につくからてっきりアクティビティが起動するときに1回だけ呼ばれるのかと思い込んでいたのが罠でした。

エディットテキストの場合、テキストをコピーしたり貼りつけたりするメニューが既に仕込まれている。
これはIMEが入れてるのかなぁ?
下記のサンプルのように書くと、既存のメニューに対して独自の機能を追加することになる。
既存の機能は残っているので、拡張されるということかな。

以下サンプル
package tak.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Test extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 事前の処理は色々端折ってます。

// コンテキストメニューを実装したい View を仕込む
EditText edit = (EditText) findViewById(R.id.edittex);
registerForContextMenu(edit);

Button button = (Button) findViewById(R.id.button);
registerForContextMenu(button);

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

// 対象の View に ID を仕込んでおけば、処理を分岐できる。
int id = v.getId();
switch (id) {
case R.id.edittex:

final EditText edit = (EditText) v;

/*
* メニューの追加とそのメニューが選択された時のイベントを仕込む。
* menu.add には表示位置を指定する引数違いのメソッドもあるので用途に合わせて使用するべし。
*/
menu.add("メニュー1").setOnMenuItemClickListener(
new OnMenuItemClickListener() {

public boolean onMenuItemClick(MenuItem item) {

edit.setText("メニュー1が選択されたんだぜっ!");

return true;
}

}
);

menu.add("メニュー2");
menu.add("メニュー3");
break;
case R.id.button:
menu.add("メニュー4");
break;
}
}

}

スポンサーサイト
検索フォーム
RSSリンクの表示
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。