来简单介绍一下android中子目录(在xml文件中实现而非submenu)以及上下文菜单(OnContextMenu)、选项菜单(OnOptionsMenu)、以及Popoup啥的。。。
(Demo基于Android Studio完成,复制源码请注意先将string以及color文件夹下内容进行复制)
1.将左侧栏的文件预览切换到project模式,在res文件夹下新建一个menu文件夹,之后建立contextmenu、optionmenudemo、popupmenu三个目录文件;各个文件的代码分别如下:
contextmenu:
optionmenudemo:
此处直接在代码中实现了子菜单,在item标签下再编写menu标签达到子菜单效果:
popupmenu:
附上strings文件中内容:
AndroidHomeWork
这是我的第一个文本测试内容
叮叮当,叮叮当,铃儿响叮当\n
我们滑雪多快乐,我们坐在雪橇上\n
冲过大风雪,他们坐在雪橇上\n
奔驰过田野,欢笑又歌唱\n
铃声响叮当,你的精神多欢畅\n
今晚滑雪真快乐把滑雪歌儿唱\n
叮叮当,叮叮当,铃儿响叮当\n
我们滑雪多快乐,我们坐在雪橇上
设置背景
退出
希望之春
宁静之夏
收获之秋
晶莹之冬
红色
绿色
蓝色
大字号
中字号
小字号
values下color文件中内容:
#3F51B5
#303F9F
#FF4081
#FF0000
#00FF00
#0000FF
#FFFF00
layout文件源码:
现在进行MainActivity中代码的编写:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv1;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使layout绑定到id为layout_1的LinearLayout
layout = (LinearLayout) findViewById(R.id.layout_1);
//使tv1绑定到id为tv1的TextView
tv1 = (TextView) findViewById(R.id.tv1);
tv1.setOnClickListener(this);
//长按事件监听:
tv1.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//展示出ContextMenu
v.showContextMenu();
return true;
}
});
//注册上下文菜单
registerForContextMenu(tv1);
}
/**
* 用于切换项目背景图片
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//创建右上角的隐藏式菜单
getMenuInflater().inflate(R.menu.optionmenudemo,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//onOptionsMenu的响应事件
switch (item.getItemId()){
case R.id.spring:
layout.setBackgroundResource(R.mipmap.bg_spring);
break;
case R.id.summer:
layout.setBackgroundResource(R.mipmap.bg_summer);
break;
case R.id.autumn:
layout.setBackgroundResource(R.mipmap.bg_autumn);
break;
case R.id.winter:
layout.setBackgroundResource(R.mipmap.bg_winter);
break;
case R.id.quit:
finish();
default:
}
return super.onOptionsItemSelected(item);
}
/**
* 用于显示PopMenu
*/
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv1:
showPopMenu(v);
}
}
/**
* 编写showPopMenu的展示方法,编写了点击popup目录之后的响应事件
* @param v
*/
public void showPopMenu(View v){
PopupMenu menu = new PopupMenu(this,v);
menu.getMenuInflater().inflate(R.menu.popupmenu,menu.getMenu());
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.green:
tv1.setTextColor(getResources().getColor(R.color.green));
break;
case R.id.red:
tv1.setTextColor(getResources().getColor(R.color.red));
break;
case R.id.blue:
tv1.setTextColor(getResources().getColor(R.color.blue));
}
return true;
}
});
menu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
}
});
menu.show();
}
/**
* 创建上下文菜单
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.contextmenu,menu);
}
/**
* 上下文菜单的响应事件
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.big:
tv1.setTextSize(30);
break;
case R.id.middle:
tv1.setTextSize(20);
break;
case R.id.small:
tv1.setTextSize(15);
break;
default:
}
return true;
}
}