声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误还请大家多多批评。
2011-10-30周日,继续《Android应用开发揭秘》的学习,接上一篇常用效果的学习;
一、 进度条(ProgressBar)
进度条作为后台程序处理过程中,反馈给使用者的一个很好的凭证,来显示当前程序处理的怎么样,进度如何等情况。Android中一共有两种样式进度条:长形进度条与圆形进度条。而且有的程序也可以在标题栏显示进度条。
在我们Eclipse开发android程序中,在编辑main.xml文件时,也提供了图形化界面的编辑,如下图:
实例分析:通过一个开始按钮的点击,显示圆形与长形进度条的进度。
关键源码:
main.xml布局文件:
<ProgressBar android:id="@+id/ProgressBar01" style="?android:attr/progressBarStyleHorizontal" android:layout_width="200dp" android:layout_height="wrap_content" android:visibility="gone" /> <ProgressBar android:id="@+id/ProgressBar02" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" android:max="100" android:progress="50" android:secondaryProgress="70" android:visibility="gone" />
【注意】该实例关键的是对ProgressBar的控制,之前例子中已经将过若是通过Handler实例的sendMessage()方法进而触发handleMessage(Message mesg)方法:
//当按钮按下时开始执行, mButton01.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ m_ProgressBar.setVisibility(View.VISIBLE);//设置ProgressBar为可见状态 m_ProgressBar2.setVisibility(View.VISIBLE); m_ProgressBar.setMax(100); //设置ProgressBar的最大值 m_ProgressBar.setProgress(0); //设置ProgressBar当前值 m_ProgressBar2.setProgress(0); //通过线程来改变ProgressBar的值 new Thread(new Runnable() { public void run(){ for (int i = 0; i < 10; i++){ try{ intCounter = (i + 1) * 20; Thread.sleep(1000); if (i == 4){ Message m = new Message(); m.what = Activity01.GUI_STOP_NOTIFIER; Activity01.this.myMessageHandler.sendMessage(m); break; }else{ Message m = new Message(); m.what = Activity01.GUI_THREADING_NOTIFIER; Activity01.this.myMessageHandler.sendMessage(m); } }catch (Exception e){ e.printStackTrace(); } } } }).start(); } }); } Handler myMessageHandler = new Handler(){ public void handleMessage(Message msg){ switch (msg.what){ case Activity01.GUI_STOP_NOTIFIER: //ProgressBar已经是对大值 m_ProgressBar.setVisibility(View.GONE); m_ProgressBar2.setVisibility(View.GONE); Thread.currentThread().interrupt(); break; case Activity01.GUI_THREADING_NOTIFIER: if (!Thread.currentThread().isInterrupted()){ m_ProgressBar.setProgress(intCounter);// 改变ProgressBar的当前值 m_ProgressBar2.setProgress(intCounter); setProgress(intCounter*100); // 设置标题栏中前景的一个进度条进度值 setSecondaryProgress(intCounter*100);//设置标题栏中后面的一个进度条进度值 } break; } super.handleMessage(msg); } };
实例效果:
二、 拖动条(SeekBar)
拖动条主要用于程序中,对一些属性的调节,如:音效大小。在Android中实现还是比较容易,SeekBar控件,而且只需要监听该控件的三个事件:
数值改变(onProgressChanged);
开始拖动(onStartTrackingTouch);
停止拖动(onStopTrackingTouch);
其控件配置也比较简单:
<SeekBar android:id="@+id/seek" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" android:secondaryProgress="75" />
效果图:
三、状态栏提示(Notification,NotificationManager)
当手机有未接电话或者短信息时,手机顶部状态栏就会显示一个小图标,用来显示用户有没有处理的快讯。NotificationManager用来管理状态栏的信息,而Notification用来处理这些快讯信息。
NotificationManager对象的获取通过gerSystenService方法,Notification对象可以设置其内容,图标,标题等属性。然后通过notify方法来执行一个Notification快讯。
实例分析:当用户点击一个按钮,就发出一个Notification快讯,这是手机顶部状态栏显示相应提示信息。展开状态栏,点击快讯信息,跳转到处理界面。
关键源码:
//初始化NotificationManager对象 m_NotificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); //获取四个按钮对象 mButton1 = (Button) this.findViewById(R.id.Button01); mButton2 = (Button) this.findViewById(R.id.Button02); mButton3 = (Button) this.findViewById(R.id.Button03); mButton4 = (Button) this.findViewById(R.id.Button04); //点击通知时转移内容 m_Intent = new Intent(Activity01.this, Activity02.class); //主要是设置点击通知时显示内容的类 m_PendingIntent = PendingIntent.getActivity(Activity01.this, 0, m_Intent, 0); //构造Notification对象 m_Notification = new Notification(); mButton1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { //设置通知在状态栏显示的图标 m_Notification.icon = R.drawable.img1; //当我们点击通知时显示的内容 m_Notification.tickerText="Button1通知内容.........."; //通知时发出默认的声音 m_Notification.defaults = Notification.DEFAULT_SOUND; //设置通知显示的参数 m_Notification.setLatestEventInfo(Activity01.this, "Button1", "Button1通知", m_PendingIntent); //可以理解为执行这个通知 m_NotificationManager.notify(0,m_Notification); } });
其中,notify()方法:
Post a notification to be shown in the status bar. If a notification with the same id has already been posted by your application and has not yet been canceled, it will be replaced by the updated information.
id |
An identifier for this notification unique within your application. |
notification |
A Notification object describing what to show the user. Must not be null. |
实例效果图:
四、对话框中的进度条(ProgressDialog)
对话框中的进度条,可以设置图标,内容等属性。
实例分析:通过点击两个按钮,显示对话框中得两种进度条。
关键源码:
//设置mButton01的事件的监听 mButton01.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { m_pDialog = new ProgressDialog(Examples_04_24Activity.this);//创建ProgressDialog对象 //设置进度条风格,风格为圆形,旋转的 m_pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); m_pDialog.setTitle("提示"); //设置ProgressDialog标题 m_pDialog.setMessage("这是一个圆形进度条对话框"); //设置ProgressDialog提示信息 m_pDialog.setIcon(R.drawable.img1); //设置ProgressDialog标题图标 m_pDialog.setIndeterminate(false); //设置ProgressDialog的进度条是否不明确 m_pDialog.setCancelable(true); //设置PrgoressDialog是否可以按退回键取消 m_pDialog.setButton("确定", new DialogInterface.OnClickListener() {//设置ProgressDialog的一个Button public void onClick(DialogInterface dialog, int which){ dialog.cancel(); } }); //让ProgressDialog显示 m_pDialog.show(); } }); //设置mButton02的事件监听 mButton02.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { m_count = 0; m_pDialog = new ProgressDialog(Examples_04_24Activity.this);//创建ProgressDialog对象 m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条风格,风格为长形 ...... m_pDialog.show();// 让ProgressDialog显示 new Thread() { public void run(){ try{ while (m_count <= 100){ // 由线程来控制进度。 m_pDialog.setProgress(m_count++); Thread.sleep(100); } m_pDialog.cancel(); }catch (InterruptedException e){ m_pDialog.cancel(); } } }.start(); } });
实例效果:
今天就实例效果学习结束了,关于android的学习,下面把布局学习结束后,基础的学习就结束了。加油!