日期16年29月日学习
一、Menu菜单
(1)、概念:
1、Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单。这种菜单叫做选项菜单(Option Menu)。
2、从3.0开始,Android不要求手机设备上必须提供MENU按键。因此Android推荐使用ActionBar来代替Menu。
(2)、分类:
OptionsMenu 按手机menu弹出的菜单
ContextMenu 长按UI控件的上下文菜单
PopupMenu 在指定UI控件的下方或上方显示的弹出菜单
----------------创建系统菜单-------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
setIconEnable(menu, true);
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
-------------------系统菜单的点击相应方法-----------------
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
//setting 设置 跳转到系统设置界面
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SETTINGS);
startActivity(intent);
break;
case R.id.sizeadd:
//字体变大 -- tv.getTextSize()返回的单位是px,tv.setTextSize设置的单位是dp
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() + 5);
break;
case R.id.sizesub:
//字体变小
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() - 5);
break;
case R.id.item1:
Toast.makeText(this, "菜单1", Toast.LENGTH_SHORT).show();
item.setChecked(true);
break;
case R.id.item2:
startActivity(new Intent(this, SecondActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
-----------------------------解决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);
--------------------------------注册控件----- 将textView注册成上下文菜单-----------
registerForContextMenu(tv);-----------tv为TextView