android从后台获得菜单,Android中Menu菜单的使用详解(大全)

1 在Activity中创建菜单

在Activity中重写两个方法

@Override

public boolean onCreateOptionsMenu(Menu menu) {

return super.onCreateOptionsMenu(menu);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

return super.onOptionsItemSelected(item);

}

创建资源文件

在res目录下创建menu目录,用来存放menu相关file

创建资源文件menu_done

每个item必须创建id

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools">

android:id="@+id/menu_area"

android:orderInCategory="100"//数值越大级别越小,可设置来排位置

android:title="@string/choice_area"//文字

app:showAsAction="always" />//显示方式

android:id="@+id/menu_icon"

android:icon="@mipmap/icon_down"//当icon和title一起使用时,显示图标

android:orderInCategory="100"

android:title="@string/choice_area"

app:showAsAction="always" />

app:showAsAction="" 的含义

always 任何情况都在toolbar显示

ifRoom 当·toolbar·空间足够时,显示,不足时隐藏

never 任何情况 不在toolbar上显示,点击在右上角的"更多"才能看见

withText 图文(title+icon)显示

collapseActionView 隐藏不直接显示

menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。

在Activity中加载资源文件

@Override

public boolean onCreateOptionsMenu(Menu menu) {

//load the file of menu that you created

getMenuInflater().inflate(R.menu.menu_done, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.menu_area) {

//TODO do everything what you want

return true;

} else {

return super.onOptionsItemSelected(item);

}

}

2 在Fragment中创建菜单

在fragment中创建menu菜单步骤和在activity中创建步骤一致,也有差别

重写的方法

//此方法与activity的有所不同

@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

super.onCreateOptionsMenu(menu, inflater);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

return super.onOptionsItemSelected(item);

}

创建menu资源同activity中一致

加载资源文件

@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

inflater.inflate(R.menu.menu_area, menu);

super.onCreateOptionsMenu(menu, inflater);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.menu_area || id == R.id.menu_icon) {

//TODO 选择区域

item.setTitle("海淀区");

return true;

} else

return super.onOptionsItemSelected(item);

}

当这样写完了去奔跑起来的时候,你会发现想要的根本没有出现,接下来。。。。

干货来了

在fragment的onCreate()方法中添加关键代码,允许添加

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

/**

* 在fragment创建menu关键方法

*/

setHasOptionsMenu(true);

}

写在最后的话

在上面的资源文件中定义了2个菜单项,一个显示文字在左侧,另一个显示的图标在文字右侧

想要实现的效果是无论点击哪一个都去改变左侧文字

实现方案

//在此方法中将要操作的MenuItem定义为全局变量

MenuItem item1;

@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

inflater.inflate(R.menu.menu_area, menu);

item1 = menu.findItem(R.id.menu_area);

super.onCreateOptionsMenu(menu, inflater);

}

//在此方法中通过查找id,以此来确定响应事件

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.menu_area || id == R.id.menu_icon) {

//TODO 选择区域

item.setTitle("海淀区");//这种实际上是操纵2个菜单项

item1.setTitle("改变了");//只操作所想的,perfect

return true;

} else

return super.onOptionsItemSelected(item);

}

如果您有更好的实现方法或是有更完善的,请给我留言更新,跪谢3分钟...

持续更新中...

你可能感兴趣的:(android从后台获得菜单)