您的位置:首页 > 产品设计 > UI/UE

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: