导读
1.Menu的简介与分类
2.Menu的创建
3.Menu点击事件的三种处理方法
4.子菜单添加问题
5.关于LayoutInFlater的拓展
Menu的简介与分类
Menu的创建
三种菜单都有这两种创建方式,两种方法的差别在于,第一种菜单项是在xml文件中创建的,再在java文件中注册,而第二种方法创建,注册都在java文件中
选项菜单
第一种方法
主界面布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hala.view01.MainActivity">
<TextView
android:id="@+id/tx1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/myLove"/>
</android.support.constraint.ConstraintLayout>
菜单布局文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/it1"
android:title="hala"
android:orderInCategory="3"></item>
<item
android:id="@+id/it2"
android:title="clarke"></item>
<item
android:id="@+id/it3"
android:title="emilia"></item>
<!--1.每个item就是一个选项
2.item可以设置一系列属性
3.orderInCategory="3"表示该选项出现的位置-->
</menu>
java文件
package com.hala.view01;
import android.content.Intent;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
private TextView tx;
private float fontSize=30.0f;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tx=(TextView)findViewById(R.id.tx1);
tx.setTextSize(fontSize);
}
/**
* 表示activity创建选项菜单时回调的方法
* @param menu
* @return
* true 用来显示菜单项
* false 无法显示菜单项
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//获取菜单填充器对象
MenuInflater it=getMenuInflater();
//第一个参数:菜单xml文件的地址,第二个参数:括号里的参数
it.inflate(R.menu.main,menu);
//简写 getMenuInflater().inflater(R.menu.main,menu);
return true;
}
}
显示结果
第二种方法
主界面布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hala.view01.MainActivity">
<TextView
android:id="@+id/tx1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/myLove"/>
</android.support.constraint.ConstraintLayout>
java文件
package com.hala.view01;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
private TextView tx;
private float fontSize=30.0f;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tx=(TextView)findViewById(R.id.tx1);
tx.setTextSize(fontSize);
}
/**
* 表示activity创建选项菜单时回调的方法
* @param menu
* @return
* true 用来显示菜单项
* false 无法显示菜单项
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//获取菜单填充器对象
MenuInflater it=getMenuInflater();
//第一个参数:菜单xml文件的地址,第二个参数:括号里的参数
it.inflate(R.menu.main,menu);
//简写 getMenuInflater().inflater(R.menu.main,menu);
/*
menu.add(groupId 菜单项分组(int型),ItemId 菜单项唯一标示id(需要在前边声明一个int型常数),order 菜单项的排序(int类型),菜单的文本)
*/
menu.add(Menu.NONE,1,Menu.NONE,"改变字体大小");
menu.add(Menu.NONE,2,Menu.NONE,"emilia");
menu.add(Menu.NONE,3,Menu.NONE,"改变字体颜色");
return true;
}
/**
* 表示当选项菜单z中的item被选中时回调的方法
* @param item 表示菜单项对象
* @return
* true 对该项事件进行处理
* false 对该项事件不进行处理
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId=item.getItemId();//获取当前点击项目的id
switch(itemId){
//如果这里是xml方式写的item,这里case后可写 R.id.it1
case 1:
fontSize+=5;
tx.setTextSize(fontSize);
break;
case 2:
Toast.makeText(MainActivity.this, "love u", Toast.LENGTH_SHORT).show();
break;
case 3:
//这里random产生0~1的随机数,包括0但不包括1
int red=(int)(Math.random()*256);
int green=(int)(Math.random()*256);
int blue=(int)(Math.random()*256);
//设置颜色的一种写法,也可以直接写数字
tx.setTextColor(Color.rgb(red,green,blue));
break;
}
return super.onOptionsItemSelected(item);
}
}
显示结果
上下文菜单
1。代码显示的是第一种方法,注意代码中的tc是一个TextView控件,用来绑定菜单。
2。点击事件处理采用的的是其独有的方法,类似选项菜单的第一种处理方法(见Menu点击事件的三种处理方法->第一种)
3。第二种方法就是在onCreateContextMenu方法中加入add()方法
弹出菜单
代码显示的是第一种方法,并且点击事件处理方法用的是第三种。
第二种方法要在onCreatePanelMenu方法中用add()编写
Menu点击事件的三种处理方法
第一种
通过onOptionsItemSelected方法,如上Menu的创建->选项菜单->第二种方法->java文件所示,注意这种方法只适用于处理选项菜单,而后两种方法适用于三种菜单
第二种
第三种
子菜单添加问题
菜单布局文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="hala"
android:orderInCategory="3">
<menu>
<item
android:id="@+id/it1"
android:title="@string/app_name"></item>
<item
android:id="@+id/it3"
android:title="i love u"></item>
</menu>
</item>
<item
android:id="@+id/it2"
android:title="clarke"></item>
<item
android:title="emilia"></item>
</menu>
java文件
package com.hala.view01;
import android.content.Intent;
import android.graphics.Color;
import android.icu.util.Calendar;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
private TextView tx;
private float fontSize=30.0f;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tx=(TextView)findViewById(R.id.tx1);
tx.setTextSize(fontSize);
}
/**
* 表示activity创建选项菜单时回调的方法
* @param menu
* @return
* true 用来显示菜单项
* false 无法显示菜单项
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
/**
* 表示当选项菜单z中的item被选中时回调的方法
* @param item 表示菜单项对象
* @return
* true 对该项事件进行处理
* false 对该项事件不进行处理
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId=item.getItemId();//获取当前点击项目的id
switch(itemId){
//如果这里是xml方式写的item,这里case后可写 R.id.it1
case R.id.it1:
fontSize+=5;
tx.setTextSize(fontSize);
break;
case R.id.it2:
Toast.makeText(MainActivity.this, "love u", Toast.LENGTH_SHORT).show();
break;
case R.id.it3:
//这里random产生0~1的随机数,包括0但不包括1
int red=(int)(Math.random()*256);
int green=(int)(Math.random()*256);
int blue=(int)(Math.random()*256);
//设置颜色的一种写法,也可以直接写数字
tx.setTextColor(Color.rgb(red,green,blue));
break;
}
return super.onOptionsItemSelected(item);
}
}
显示结果