UI Components的理解

UI Components

(MenuActionBarDialogNotificationToast)这些对象不是View,但是都可以以某种方式呈现View

特性:构建方式、表现形式、监听方式

1、是什么?是用于呈现view的一些组件,方便与用户进行更好的交互

2、类型:

1Menu(菜单)

学习: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弹出式菜单(PopuMenu3.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(动作栏)

是什么?

ActionBarandroid3.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();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值