Android--菜单详解

Android中的菜单分为三种,即选项菜单(系统菜单),上下文菜单和弹出式菜单。

选项菜单:

一个activity只有一个选项菜单,选项菜单的创建方式有低版本创建和高版本创建两种。最常用的是干版本创建,所以这里着重高版本的创建方式的介绍。

创建步骤:

1, 在res/menu/文件夹中xml 中定义每个菜单项

<item
 android:id =" 菜单中每个Item的id"
 android:title="每个Item 文本信息"
 android:orderInCategory :Menu中显示的顺序,数字越小, 越在前面显示, 如果数字一样, 先写那个  那个就在前面位置显示
  android:showAsAcrtion:设置Menu何时和怎样显示在Action Bar中。

   其中属性值:never  :   永远都不显示在Action Bar中
    always :   一直显示在Action Bar中
    ifRoom :   如果有空间 则显示在Action Bar中
/>
2, 在activity中 显示菜单项
重写父类的方法:
onCreateOptionsMenu(Menu menu)
{
//加载菜单
getMenuInflater.inflat(R.menu.main,menu);
}
3, 在activity中 每个菜单项实现点击
重新父类的方法:
onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
 case R.id.action_red:
.......
 break;
}
}

低版本创建: 
//低版本的创建 /**
* groupId 分组ID
* itemId   菜单项的Id
* order    排序
* title    菜单显示的文字
*/
menu.add(menu.NONE, MENU_ONE, menu.NONE, "代码创建的菜单");
//带有子菜单的一级菜单
SubMenu subMenu = menu.addSubMenu(menu.NONE, 2, menu.NONE, "sub 1");
subMenu.add(menu.NONE, 21, 1, "sub 1-1");
subMenu.add(menu.NONE, 22, 2, "sub 1-2");
subMenu.add(menu.NONE, 23, 0, "sub 1-3");
实例:

public class MainActivity extends Activity {
	private TextView t;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		t = (TextView) findViewById(R.id.t);
	}
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.red:
			t.setTextColor(Color.RED);
			t.setTextSize(12);
			break;
		case R.id.green:
			t.setTextColor(Color.GREEN);
			t.setTextSize(22);

			break;
		case R.id.blue:
			t.setTextColor(Color.BLUE);
			t.setTextSize(32);
			break;
		}
		return super.onOptionsItemSelected(item);
	}
<item
        android:id="@+id/ACTION_COLOR"
        android:title="选择颜色">
        <menu >
            <group >
                <item
                    android:id="@+id/red"
                    android:title="红色" />
                <item
                    android:id="@+id/green"
                    android:title="绿色" />
                <item
                    android:id="@+id/blue"
                    android:title="蓝色" />
            </group>
        </menu>
   </item>

上下文菜单:

ContextMenu 和OptionsMenu的区
1,  OptionsMenu 的拥有者是Activity;  ContextMenu 上下文菜单的拥有者是Activity中View
2,  每个Activity中有且只有一个OptionsMenu,它为整个Activity服务;  每个Activity中可以有多个View, 那个View需要显示上下文菜单 需要为该View注册上下文菜单registerForContextMenu(View  view);
创建方式
1, 注册上下文菜单
2, res/menu/文件中的  创建每个Item项
3, 重写父类方法:  onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo)
/**
* 当长按View时调用

* ContextMenu menu    需要显示的上下文菜单
* View v    用户选择的View
* ContextMenuInfo menuInfo 所选择界面的额外信息
*      (Spinner,ListView,GridView)
*      携带这AdapterView 的 posotion信息
--菜单可见--
4, 实现菜单项的点击: 重写父类的方法:  onContextItemSelected(MenuItem  item)
实例:

public class MainActivity extends Activity {
	private ListView lv;
	private List<String> data = new ArrayList<String>();
	private ArrayAdapter<String> adapter;
	private int position = 0;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.lv);
		for (int i = 0; i < 20; i++) {
			data.add("Item --->" + i);
		}
		adapter = new ArrayAdapter<String>(this,
			android.R.layout.simple_list_item_1, data);
		lv.setAdapter(adapter);
		// 1, 注册上下文对象
		registerForContextMenu(lv);
	}
	// 2, 在res/menu/中创建菜单项
	// 3, 重写父类的方法, 实现显示
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		// 加载菜单页面
	    getMenuInflater().inflate(R.menu.main, menu);
		// 获取当前选中ListView的Item的下标
		position = ((AdapterContextMenuInfo) menuInfo).position;
	}
	// 4, 重写父类的方法, 实现每个菜单项的点击
	@Override
	public boolean onContextItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case R.id.action_delete:
			// 从数据源中移除数据
			data.remove(position);
			// 刷新适配器
			adapter.notifyDataSetChanged();
		break;
		}
		return super.onContextItemSelected(item);
	}
}

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_delete"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="删除信息"/>

</menu>

弹出菜单:

Popup Menu    弹出式菜单      Api 必须在11以上,  可以为任意View 创建弹出式菜单
  1, 得到PopupMenu的对象
   PopupMenu pMenu = new PopupMenu(this,位置参考的UI控件);
  2, 加载菜单
   getMenuInflater.inflat(R.menu.main,menu);
  3, 为PopupMenu设置监听器
  pMenu.setOnMenuItemClickListener(.....);
  4, 显示菜单
  pMenu.show();
实例:

public class MainActivity extends Activity {
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) findViewById(R.id.tv);
	}
	// 点击按钮弹出菜单
	public void change(View v) {
		// 得到popup对象
		PopupMenu popupMenu = new PopupMenu(MainActivity.this, v);
		// 加载菜单
		getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
		// 为 popup设置监听器
		popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
			@Override
			public boolean onMenuItemClick(MenuItem item) {
				// TODO Auto-generated method stub
				switch (item.getItemId()) {
				case R.id.action_color:
					tv.setTextColor(Color.CYAN);
					break;
				case R.id.action_size:
					tv.setTextSize(20);
					break;
				}
				return false;
			}
		});
		// 显示
		popupMenu.show();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android Studio中导入Android源码,需按照以下步骤进行: 1. 下载Android源码:首先需要从Android官方网站(https://source.android.com/setup/build/downloading)上下载Android源码的zip文件。选择适合你设备版本的源码,并下载到本地。 2. 解压源码:将下载的源码zip文件解压到你希望存储源码的位置。 3. 导入源码项目:打开Android Studio,并点击“File”菜单,然后选择“New”,再选择“Import Project”。 4. 选择源码目录:在弹出的对话框中,浏览到你已经解压的源码目录,并选择其中的“build.gradle”文件,然后点击“OK”。 5. 等待构建:Android Studio会开始构建项目,可能需要一些时间来完成这个过程,具体时间取决于你的硬件性能和Android源码的大小。 6. 配置项目:构建完成后,你需要配置一些项目属性。你可以根据你的需求进行更改,比如修改Android版本、SDK版本、Gradle版本等。 7. 构建项目:在配置完成后,再次构建项目。你可以点击Android Studio工具栏中的“Build”按钮来完成构建。构建完成后,你就可以进行Android源码的浏览、修改和编译等操作了。 需要注意的是,导入Android源码是一个相对复杂的过程,并且需要一定的硬件配置和软件环境支持。同时,也需要有一定的Android开发和编译经验。因此,在遇到问题时,你可以参考官方文档或在开发者社区中寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值