今天给大家分享一下安卓开发中一些“有的没的”比如说:吐司 菜单 对话框。
一, 菜单 res/menu
1, 选项菜单 (系统菜单) OptionsMenu
当前Activity调用 一个Activity只能有一个系统菜单
1.1 创建方式:
高版本的创建 在res/menu/ 中xml文件创建 Item项
低版本的创建 纯java代码创建Item项
1.2 高版本创建的方式(xml的方式)
step01: 在res/menu/****.xml 中,创建每个菜单项<item />
<!--
id Menu中每个菜单项的Id
orderIncategory Menu中显示的顺序, 数字越小, 越在前面位置显示,如果相同,则按书写顺序显示
showAsAction 设置Menu何时和怎样显示在Action Bar上
属性值:
never 永远都不会显示在ActionBar上
always 一直显示在ActionBar上
ifRoom 如果有空间则显示在ActionBar上
title 设置菜单项显示的文本信息
-->
step02: 在java中 (Activity中)
重写父类的方法: onCreateOptionsMenu(Menu menu) --- 系统菜单就可见
重写父类的方法: onOptionsItemSelected(MenuItem item) -- 系统菜单就可以检测选中的效果
1.3 低版本创建菜单
//低版本的创建方式
/**
* groupId 分组Id
* itemId 每个菜单项的Id
* order 排序
* title 每个菜单项的文本信息
*/
menu.add(menu.NONE, 1, menu.NONE, "java 代码创建的菜单");
//带有子菜单的一级菜单
SubMenu subMenu = menu.addSubMenu(menu.NONE, 2, menu.NONE, "sub 1");
subMenu.add(menu.NONE, 21, 1, "sub 1-1");
subMenu.add(menu.NONE, 20, 0, "sub 1-0");
subMenu.add(menu.NONE, 22, 2, "sub 1-2");
2, 上下文菜单 ContextMenu
可以为每个View 指定上下文菜单, 长按View会创建上下文菜单
通常情况下, listView 和 GridView 指定上下文菜单
2.1 需要给View注册上下文菜单
registerForContextMenu(tv);
2.2 在res/menu 文件加载中 创建每个菜单项
2.3 在Activity中, 重写父类的方法: onCreateContextMenu()
/**
* 当用户长按View 时调用
*
* ContextMenu menu 需要显示的上下文菜单
* View v 用户选择的View
* ContextMenuInfo menuInfo 所选择页面的额外信息(ListView GridView Spinner)
* 携带的是AdapterView 的position信息
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
// 显示菜单
getMenuInflater().inflate(R.menu.main, menu);
int position = ((AdapterContextMenuInfo)contextMenuInfo).position;
}
2.4 在Activity中, 重写父类的方法: onContextItemSelected(MenuItem item)
/**
* 选择每个菜单项时调用
*
* MenuItem item 用户当前选择的菜单项
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_red:
tv.setTextColor(Color.RED);
break;
}
return super.onContextItemSelected(item);
}
3, 弹出式菜单 PopupMenu API 11以上, 可以问任意View 添加弹出式菜单
//1, 得到弹出式菜单对象
/**
* context 上下文对象
* anchor 当前弹出式菜单参考位置的UI控件
*/
PopupMenu popupMenu = new PopupMenu(this, v);
//2, 加载菜单
//getMenu() 获得的是PopupMenu 自带的Menu对象
getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
//3, 设置PopupMenu的监听器
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
//处理菜单项的选中事件
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_color:
tv.setTextColor(Color.rgb((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
break;
case R.id.action_size_30:
tv.setTextSize(30);
break;
}
return false;
}
});
//4, 显示弹出式菜单
popupMenu.show();
二, 对话框 Dialog
特点:
1, 当前界面弹出的小窗口, 用于提示用户的重要信息, 并获得焦点
2, 用户要与它进行交互, 可以接收用户输入的信息, 也可以反馈信息给用户, 如: 进度条,退出提示等
常用对话框包括4部分:
图片区
标题区
内容区
按钮区
分类:
普通对话框 AlertDialog
进度条对话框 ProgressDialog
日期选择对话框 DatePickerDialog
时间选择对话框 TimePickerDialog
自定义对话框
列表对话框:
普通列表对话框
builder.setItems(R.array.colors,new OnClickListener(){})
单选列表对话框
builder.setSingleChoiceItems(R.array.sizes,int checkId,new OnClickListener(){})
多选列表对话框
builder.setMultiChoiceItems(getResource().getStringArray(R.arrays.hobbys),boolean[] checkedItems,new onMultiChoiceClickListener(){})
适配器列表对话框
builder.setAdapter(adapter,new OnClickListener(){})
三,Toast
给用户进行提示 自身不阻塞线程 自己会过一小段时间自动消失
Toast的特点
>1,显示一段时间自动消失
>2,Toast 没有焦点没有监听
>3,不会对Ui线程造成阻塞
Toast.LENGTH_LONG:时间长 3.5s