安卓入门-UI Components之 ActionBar ,Dialog,Notification ,Toast

================================

 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 Components
2)一个弹出式窗口对象

===============================


2.Dialog 应用场合?

以弹出式窗口形式实现与用户交互。



------------------------------------------------------


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
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值