================================
ActionBar
================================
1.ActionBar 是什么?
1)UI Components
2)动作栏(标题栏)对象
public class MainActivity extends Activity implements TabListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar bar=getActionBar();//主题中必须包含actionBar
//bar.hide();//隐藏actionBar;
//bar.show();//显示actionBar;
//显示向左的图标
bar.setDisplayHomeAsUpEnabled(true);
//设置导航模式
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//添加tab选项
bar.addTab(bar.newTab().setText("tab01").setTabListener(this));
bar.addTab(bar.newTab().setText("tab02").setTabListener(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home){
finish();//关闭当前页面
}
}
2.ActionBar 应用场合?
ActionBar通常会呈现一个页面标题,或者呈现一些
主要的选项菜单以实现与用户的交互。
3.ActionBar 的简单应用?
1)ActionBar对象的获得?
2)ActionBar对象的隐藏,显示?
3)ActionBar对象的相关设置?
a)导航操作设置
b)自定义view设置
c)自定义主题(styles.xml中定义,在清单配置文件的activity元素上引用主题)
d)......................
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar bar=getActionBar();
//隐藏标题(不推荐这种写法)
//bar.setDisplayShowTitleEnabled(false);
bar.setNavigationMode(
ActionBar.DISPLAY_SHOW_CUSTOM);
//设置显示自定义布局view
bar.setDisplayShowCustomEnabled(true);
TextView tv=new TextView(this);
tv.setTextColor(Color.BLACK);
tv.setText("本地音乐");
//设置自定义的view
//bar.setCustomView(tv);
bar.setCustomView(tv,
new ActionBar.LayoutParams(
LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
Gravity.CENTER));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
==============================
1.Dialog 是什么?
1)UI Components2)一个弹出式窗口对象
===============================
以弹出式窗口形式实现与用户交互。
------------------------------------------------------
3.Dialog 应用类型?
1)AlertDialog (提示对话框)
2)DatePickerDialog(日期对话框),TimePickerDialog(时间)
3)ProgressDialog(进度对话框,先了解)
-----------------------------------------------------------
4.Dialog 相关对象的创建?
1)创建对象(Builder,构造方法)
2)显示或销毁对象(show,cancel)
3)监听对象(onClickListener,.....)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick01(View v){
new AlertDialog.Builder(this)
.setItems(new String[]{"phone","email"},
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which==0){
Toast.makeText(MainActivity.this, "通过手机找回", 0).show();
}else if(which==1){
Toast.makeText(MainActivity.this, "通过email找回", 0).show();
}
dialog.cancel();
}
}).show();
}
public void onClick02(final View v){
final String items[]=new String[]{"A","B","C"};
new AlertDialog.Builder(this)
.setTitle("请选择")
.setSingleChoiceItems(items,
0,new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((Button)v).setText(items[which]);
}
}).setPositiveButton("确定",null).show();
}
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setTitle("标题")
.setMessage("您确定退出吗")
.setPositiveButton("确定",
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.super.onBackPressed();
}
})
.setNegativeButton("取消", null)
.create().show();//显示
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick01(final View v){
final Calendar c=Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
int day=c.get(Calendar.DAY_OF_MONTH);
//参考 构造方法构建对象
final DatePickerDialog dialog=
new DatePickerDialog(this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view,
int year, int monthOfYear,
int dayOfMonth) {
setTitle(v, c, year, monthOfYear, dayOfMonth);
}
private void setTitle(final View v, final Calendar c, int year,
int monthOfYear, int dayOfMonth) {
c.set(year, monthOfYear, dayOfMonth);
String title =
DateUtils.formatDateTime(MainActivity.this,
c.getTimeInMillis(),
DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_SHOW_WEEKDAY
| DateUtils.FORMAT_SHOW_YEAR
| DateUtils.FORMAT_ABBREV_MONTH
| DateUtils.FORMAT_ABBREV_WEEKDAY);
((Button)v).setText(title);
}
},year,month,day);
//要求显示当前时间
dialog.show();
}
}
---------------------------------------------------------------
5.Dialog 对象扩展?
1)自己编写dialog继承AlertDialog
2)对话框形式的activity(主要是修改activity的主题)
===============================
Notification (通知)
===============================
1.Notification 是什么?
1)UI Components
2)显示在状态栏的一个通知对象?
2.Notification 对象应用场合?
通常是在service端,通知用户相关信息。
例如:
1)软件的更新
2)短信的通知
3)正在播放音乐
4)新闻的头条信息,.....
public class MainActivity extends Activity {
private NotificationManager nManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nManager=(NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
}
public void onClick01(View v){
//createAndSendNotification01();
createAndSendNotification02();
}
private void createAndSendNotification01() {
//构建通知对象
Notification ntf=
new Notification.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)//必须设置
.setContentTitle("title")
.setContentText("Content")
.setContentIntent(
PendingIntent.getActivity(this,
100,new Intent(this,OtherActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT))//设置延迟意图
.setTicker("您来新消息了")//引爆消息
.build();
//ntf.flags=Notification.FLAG_NO_CLEAR;
ntf.flags=Notification.FLAG_AUTO_CANCEL;
//发送通知对象
nManager.notify(100, ntf);
}
private void createAndSendNotification02() {
//封装自己写布局view对象
RemoteViews views=
new RemoteViews(getPackageName(),
R.layout.ntf_layout_01);
views.setTextViewText(R.id.titleId, "title-A");
views.setTextViewText(R.id.contentId,"content-A");
//views.setOnClickPendingIntent(R.id.closeId, pendingIntent)
//构建通知对象(借助NotificationCompat兼容包Builder类型构建通知对象)
Notification ntf=
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)//必须设置
.setContent(views)
.build();
//ntf.flags=Notification.FLAG_NO_CLEAR;
ntf.flags=Notification.FLAG_AUTO_CANCEL;
//发送通知对象
nManager.notify(100, ntf);
}
@Override
protected void onDestroy() {
super.onDestroy();
//nManager.cancel(100);//页面销毁时不一定要销毁通知
}
}
3.Notification 对象的应用实现?
1)构建通知对象(Notification)
2)发送通知对象(NotificationManager)
相关API:
1)Notification(通知对象)
2)NotificationManager(系统服务,用于发送通知)
3)NotificationCompat(兼容包,内置一个Builder类型)
4)Notification.Builder
5)PendingIntent (延迟意图,封装着一个intent)
6)Intent(意图对象)
7)RemoteViews(用于封装view对象,自定义通知布局时使用)
=============================================
Toast 对象
=============================================1.Toast 是什么?
1)UI Components
2)弹出式窗口通知对象。
2.Toast 应用场合?
页面窗口显示信息
例如:
1)点击回退(再点一次则退出)
2)网络中断
3).......
3.Toast对象的简单应用
1)构建对象(参考构造方法或者静态方法)
2)显示对象(show)
例如:
1)方法1:
Toast t=Toast.makeText(this,text,0);
t.setGravity(.....)
t.show();
2)方法2:
Toast t=new Toast(this);
t.setView(....)
t.setGravity(...)
t.setDuration(....)
t.show();
=============================
UI 绘制
=============================
1.何为UI 绘制?
在这里要讲的UI 绘制主要是一些view的绘制,android
中所有的view都是通过一定手段绘制出来,例如button
public class MainActivity extends Activity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView) findViewById(R.id.imageView1);
drawRectText();
}
public void drawRectText(){
//1.背景对象
Bitmap bitMap=
Bitmap.createBitmap(200,200,Config.ARGB_8888);
//2.画板对象
Canvas c=new Canvas(bitMap);
//3.画笔对象
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.YELLOW);
//4.绘制矩形及文本
c.drawRect(0, 0, 200, 200, paint);
paint.setColor(Color.RED);
paint.setTextSize(30);
String text="helloworld";
Rect bounds=new Rect();//矩形对象
paint.getTextBounds(text,0,
text.length(),bounds);//获得文本宽度,高度,然后封装到rect对象
Log.i("TAG", "width="+bounds.width());
Log.i("TAG", "height="+bounds.height());
//绘制居中文本
c.drawText(text,100-bounds.width()/2,
100+bounds.height()/2, paint);
//5.显示绘制的对象
imageView.setImageBitmap(bitMap);
}
}
public class MainActivity extends Activity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView) findViewById(R.id.imgId);
}
public void onClick(View v){
Bitmap src=BitmapFactory.
decodeResource(getResources(),
R.drawable.ic_launcher);//获得原有位图对象
//1.构建Bitmap对象
Bitmap bitMap=
Bitmap.createBitmap(src.getWidth(),
src.getHeight(), Config.ARGB_8888);
//2.构建Canvas对象
Canvas c=new Canvas(bitMap);
//c.drawColor(Color.YELLOW);//设置画布背景色
//3.构建Paint对象
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
//4.进行绘制
//c.drawBitmap(src,300/2-src.getWidth()/2,300/2-src.getHeight()/2, paint);
//c.drawBitmap(src,null,new Rect(0,0,300,300), paint);
Matrix m=new Matrix();//度量
//m.setRotate(45);
//m.setRotate(180,src.getWidth()/2,src.getHeight()/2);
//m.postRotate(180,src.getWidth()/2,src.getHeight()/2);
//设置缩放比例及相关位置
m.postScale(0.5f,.5f, src.getWidth()/2,src.getHeight()/2);
//m.postScale(0.5f,0.5f);
c.drawBitmap(src, m, paint);
//5.显示绘制结果
imageView.setImageBitmap(bitMap);
}
}
2.UI 绘制应用场合?
首先Android所有view都是通过API绘制的,当android
中提供的view不能完全满足我们自己业务需求时,我们
可以自己进行绘制,例如绘制系统报表的柱状图,饼状图
等等。。。
3.UI 绘制常用对象?
1)Canvas (画板对象)
2)Bitmap (背景对象)
3)Paint(画笔对象)
4)Path,.......
4.UI 绘制基本步骤?
1)构建背景对象(Bitmap)
2)构建画板对象(Canvas)并关联背景对象
3)构建画笔对象(Paint)
4)执行绘制动作(画图)
5)显示绘制的对象。
5.自定view的实现?(当官方给定view不能满足需求)
1)直接或间接继承View
2)重写相关方法(根据绘制需求):例如onDraw,.....
案例:
1)CircleView (让此view做为页面指示器)
2)......
public class CircleView extends View{
public CircleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleView(Context context) {
super(context);
}
private float width,varWidth,height;
/**窗口尺寸变化时*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
varWidth=width=w/2-3*radius;
height=h/2;
}
private int radius=10;
private Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
/**当一个view要显示在页面上时会执行此方法*/
@Override
protected void onDraw(Canvas canvas) {
paint.setColor(Color.GREEN);
paint.setStyle(Style.STROKE);//空心
//绘制3个圆
for(int i=0;i<3;i++){
canvas.drawCircle(width+i*3*radius,
height,radius, paint);
}
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);//实心
//绘制1个实心圆
canvas.drawCircle(varWidth,
height,radius-2, paint);
}
public void update(int position,float offset){
varWidth=width+(position+offset)*3*radius;
invalidate();//重绘,此时重新执行onDraw
}
}
------------------------------------------------------