UI Components的理解
2016-06-11 11:40
459 查看
UI Components
(Menu、ActionBar、Dialog、Notification、Toast)这些对象不是View,但是都可以以某种方式呈现View特性:构建方式、表现形式、监听方式
1、是什么?是用于呈现view的一些组件,方便与用户进行更好的交互
2、类型:
1)Menu(菜单)
学习:1创建方式2表现形式3事件处理1.1选项菜单(OptionMenu)
android:showAsAction="never" 显示在Menu里
android:showAsAction=="always" 显示在ActionBar上
android:showAsAction="ifRoom" 设置item,如果有空间的话就显示,没有的话就隐藏
android:showAsAction="collapseActionView" 默认收起
a.创建(重写onCreateOptionMenu)
@Override public boolean onCreateOptionsMenu(Menu menu) { // 1、借助context对象根据id找到main.xml资源 // 2、底层会借助PULL解析解析xml // 3、底层会根据xml的描述,通过反射构建item对象 // 4、将item对象添加到menu对象中 getMenuInflater().inflate(R.menu.main, menu); //采用java方式添加item MenuItem item05=menu.add(0, 300, 105, "item05"); item05.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); //获得某个item对象 MenuItem item = menu.findItem(R.id.item02); //获得item中的actionView SearchView sv = (SearchView) item.getActionView(); return true; }
b.监听(重写onOptionsItemSelected)
@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.item01) { Toast.makeText(this, "item01", 0).show(); } else if (id == R.id.item02) { Toast.makeText(this, "item02", 0).show(); } return super.onOptionsItemSelected(item); }
1.2上下文菜单(ContextMenu)
a.注册registerForContextMenu
registerForContextMenu(lsv);
b.创建,重写onCreateContextMenu
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.main, menu); }
c.监听onContextItemSelected
@Override public boolean onContextItemSelected(MenuItem item) { int id= item.getItemId(); if(id==R.id.share){ Toast.makeText(this, "分享",0).show(); }else if(id==R.id.delet){ Toast.makeText(this, "删除", 0).show(); //获得删除的item相关信息(例如位置) AdapterContextMenuInfo acmi= (AdapterContextMenuInfo) item.getMenuInfo(); //从数据集中删除数据 list.remove(acmi.position); //更新 ((ArrayAdapter<?>)lsv.getAdapter()).notifyDataSetChanged(); } return super.onContextItemSelected(item); }
1.3弹出式菜单(PopuMenu)3.0API
public void onClick(final View v){ //1、构建PopuMenu对象(对版本有要求) PopupMenu pm = new PopupMenu(this, v); //2、构建菜单项 pm.getMenuInflater().inflate(R.menu.main, pm.getMenu()); //3、添加事件监听 pm.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { ((Button) v).setText(item.getTitle()); return true; } }); //4、显示菜单 pm.show(); }
1.4子菜单(以上每种菜单都有子菜单)
2)ActionBar(动作栏)
是什么?ActionBar是android3.0推出的一个新的对象,此对象最主要的目的是在标题栏更好的为用户呈现一些view组件,并实现与用户的交互,例如可以呈现View对象。
应用?
获得ActionBar
操作ActionBar
修改ActionBar
...
3)Dialog(对话框)
是什么?Android中的一个UI组件、Android中的一个浮动窗口应用场合?以浮动窗口形式呈现UI,以浮动窗口形式用于交互
Dialog的应用实现
1、AlertDialog(提示对话框)
public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setMessage("message"); builder.setTitle("title"); AlertDialog dialog = builder.create(); dialog.show(); } public void onClick02(final View v) { final String[] items = new String[] { "item01", "item02" }; new AlertDialog.Builder(this).setItems(items, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((Button) v).setText(items[which]); } }).show(); } public void onClick03(View v){ new AlertDialog.Builder(this) .setTitle("退出").setMessage("您确定要退出吗?") .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MainActivity.super.onBackPressed(); } }) .setNegativeButton("取消", null).show(); }
2、DatePickerDialog(日期对话框)(TimePickerDialog)
public void onClick(final View v){ Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int monthOfYear = cal.get(Calendar.MONTH); int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { ((Button)v).setText(year+"-"+(monthOfYear+1)+"-"+dayOfMonth); } }, //callback year, //year monthOfYear,//monthOfYear //月份是0到11 dayOfMonth).show();//dayOfMonth }
3、ProgressDialog(进度对话框),需要结合进程
4、扩展 对话框形式的Activity(主要通过修改主题)
android:theme="@android:style/Theme.Holo.Light.Dialog"
4)Notification(通知)
是什么?手机状态栏显示的一个对象、也是用于呈现View的一个对象应用场合?Notification一般应用于服务端(service),可以在service端创建并发送,显示在状态栏。
例如:1)软件更新2)短信通知3)未接电话4)播放音乐5)新闻头条通知...
应用实现
1、构建Notification对象(借助builder对象)
2、发送Notification对象(借助NotificationManager对象)
A)NotificationManager,SystemService
B)Notify(int id,Notification ntf);cancel(int id);
3、操作Notification对象
4、定义Notification布局
RemoteViews
setXXX();
ntf.flags = Notification.FLAG_NO_CLEAR;//不可以清除通知
兼容版
public void onClick2(View v){ //兼容版本 Notification ntf= new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Title") .setContentText("Context") .build(); NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nManager.notify(1,ntf); }
引爆消息
public void onClick(View v){ //创建通知 Notification ntf = new Notification.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Title") .setContentText("Content") .setTicker("您来新消息了")//引爆消息 //设置延迟意图(点击通知时要执行什么操作) .setContentIntent(PendingIntent.getActivity(this, 100,new Intent(this,outherActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)) .build();//API 16以后 //假如点完通知要跳转到一个Acticity页面,并希望通知自动销毁,可以设置此标记 ntf.flags = Notification.FLAG_AUTO_CANCEL;//点击后清除 //ntf.flags = Notification.FLAG_NO_CLEAR;//不可以清除通知 //发送通知 NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nManager.notify(0,ntf); }
5)Toast(通知)
是什么?Android中的一个消息、用于呈现具体内容的应用场合?给出一个正确提示、错误提示
应用实现
1)创建
a)构造方法
b)静态方法
2)设置
setXXX();
3)显示
Show();
相关文章推荐
- Property List Programming Guide(二)
- Map集合中value()方法与keySet()、entrySet()区别
- Making Quick macroScripts in 3DS Max
- 对Handler,Looper,messagequeue,HandlerThread的深入理解,Handler常见面试题
- leetcode 95. Unique Binary Search Trees II-分治算法|动态规划|卡特兰数
- UITableView 的操作
- (OK) Building Android from AOSP source code
- Request.UrlReferrer详解
- 数据库中的QueryRunner的大致实现
- [leetcode] 60. Permutation Sequence 解题报告
- iOS 事件处理之UIResponder简介
- Android-基本UI控件
- vue.js
- UIResponder介绍
- poj 1019 Number Sequence 第i位上的数字 (组合数学)
- 严重: Exception occurred during processing request: null原因解析
- UIBezierPath+CAShapeLayer绘图
- POJ1947 Rebuilding Roads
- ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet
- 快速构建不同UI样式的列表适配器方法-AbsAdapter