Androidメニューはまとめを使用
1.メニュー:-システムメニュー--onCreateOptionsMenu-onOptionsItemSelected--システムメニューにアイコンを追加-コンテキストメニュー:UIビューベース--1.UIビューのコンテキストメニューを登録する:ビューに時間がかかると、コンテキストメニュー-2が作成されます.書き換えonCreateContextMenu()—-3.onContextItemSelected()を書き換える–ポップアップメニュー(3.0が表示されます)--カスタムPopupMenu--メニューにメニュー項目を追加
1)システムメニューの作成
各オプションにアイコンを追加するには、次の方法を呼び出す必要があります.
2)コンテキストメニューの作成
3)PopupMenu:ポップアップメニュー、3.0から出てくるのでapiは最低11、//2番目のパラメータはポップアップメニュー表示の参照位置で、通常はリファレンスビューの下に//ポップアップメニューオブジェクトを作成する
4)ListView表示メニューを長押しする:listViewの項目を長押しする、コンテキストメニュー実装を表示する1:listViewにOnCreateContextMenuListenerインタフェースを実装させる、
実装2:コンテキストメニューをlistViewに登録させます.
ソースコード
1)システムメニューの作成
//menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
setIconEnable(menu,true);//
//
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//
//item
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO
switch(item.getItemId())
{
case R.id.action_settings:
startActivity(new Intent(Settings.ACTION_SETTINGS));
break;
case R.id.action_add:
textView.setTextSize(textView.getTextSize()+5);
break;
case R.id.action_sub:
textView.setTextSize(textView.getTextSize()-5);
break;
}
return super.onOptionsItemSelected(item);
}
各オプションにアイコンを追加するには、次の方法を呼び出す必要があります.
//
//enable true , ,enable false 。4.0+
private void setIconEnable(Menu menu, boolean enable)
{
try
{
Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
//MenuBuilder Menu , , menu MenuBuilder (java )
m.invoke(menu, enable);
} catch (Exception e)
{
e.printStackTrace();
}
}
2)コンテキストメニューの作成
-- , ;
//1: UI -- textView
registerForContextMenu(textView);
//2:
//view UI
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO
getMenuInflater().inflate(R.menu.main, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
//3:
@Override
public boolean onContextItemSelected(MenuItem item) {
......
}
3)PopupMenu:ポップアップメニュー、3.0から出てくるのでapiは最低11、//2番目のパラメータはポップアップメニュー表示の参照位置で、通常はリファレンスビューの下に//ポップアップメニューオブジェクトを作成する
public void btnClick(View v)
{
PopupMenu pop = new PopupMenu(this, v);// ,
//
getMenuInflater().inflate(R.menu.main, pop.getMenu());
//
pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId())
{
case R.id.action_add:
fontSize+=5;
textView.setTextSize(fontSize);
break;
case R.id.action_sub:
fontSize-=5;
textView.setTextSize(fontSize);
break;
case R.id.action_background:
int red = (int)(Math.random()*256);
int green = (int)(Math.random()*256);
int blue = (int)(Math.random()*256);
textView.setBackgroundColor(Color.rgb(red, green, blue));
break;
}
return false;
}
});
//
pop.show();
}
4)ListView表示メニューを長押しする:listViewの項目を長押しする、コンテキストメニュー実装を表示する1:listViewにOnCreateContextMenuListenerインタフェースを実装させる、
1)
listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, 0, 0, " ");
menu.add(0, 1, 0, " ");
menu.add(0, 2, 0, " ");
menu.setQwertyMode(true);
}
});
2)
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
int position = menuInfo.position;//menuInfo
Log.i("--", "position :" + position);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, " ", 0).show();
break;
case 1:
Toast.makeText(this, " ", 0).show();
break;
case 2:
Toast.makeText(this, " ", 0).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
実装2:コンテキストメニューをlistViewに登録させます.
//
registerForContextMenu(listView);
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo acm = (AdapterContextMenuInfo) menuInfo;
// listView
currentItemPostion = acm.position;
getMenuInflater().inflate(R.menu.main, menu);
}
ソースコード