版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshunli/article/details/83350709
首先我们在我们的res文件下新建一个Directory,然后在建立一个Menu source file.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
这里我们创建两个菜单项,里面的<item>标签就是用来创建具体的某一个菜单项,然后通过android:id来指定唯一的标识符,通过android:title给这个菜单项指定一个名称。
package com.example.sunshunli.menutest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//当用户点击Menu按钮的时候会调用这个方法。
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//当用户点击Menu的选项的时候会调用这个方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "You clicked remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
}
我们重写onCreateOptionsMenu()方法,在AS中可以使用快捷键来快速实现重写,Ctrl+o.
通过getMenuInflater()方法能够收到MenuInflater对象,在调用它的inflate()方法就给当前的活动创建了菜单。
inflate接受两个参数,第一个参数用于指定我们通过那一个资源文件来创建菜单,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法传入的一个参数。然后返回的是Ture,表示允许创建的菜单显示出来。否则不显示。
android中的活动有五种启动的方式,standard,singleTop,singleTask,singleInstance,
standard:是活动的默认启动方式。对于standard模式,系统不会关心这个活动是否已经存在返回栈,每次启动都会为该活动建立一个新的实例。
singleTop:在启动活动时如果发现返回栈的栈顶已经是该活动,那么可以直接使用它,不会在创建新的活动实例。
singleTask:如果不是栈顶元素,那么还是会建立新的实例,所以使用singleTask会解决这一个问题。
singleInstance:这种模式会新建一个返回栈。解决共享的问题。