`
libo19881179
  • 浏览: 266860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ProgressBar 总结

阅读更多

多式样ProgressBar

普通圆形ProgressBar

1.png 

4.png 

该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中。

一般只要在XML布局中定义就可以了。

  1. <progressBar android:id="@+id/widget43"
  2.       android:layout_width="wrap_content" 
  3.       android:layout_height="wrap_content"    
  4.       android:layout_gravity="center_vertical">
  5. </ProgressBar>
复制代码
此时,没有设置它的风格,那么它就是圆形的,一直会旋转的进度条。

各大小样式圆形ProgressBar


超大号圆形ProgressBar

3.png 
此时,给设置一个style风格属性后,该ProgressBar就有了一个风格,这里大号ProgressBar的风格是:
  1. style="?android:attr/progressBarStyleLarge"
复制代码
完整XML定义是:
  1. <progressBar android:id="@+id/widget196"
  2.       android:layout_width="wrap_content" 
  3.       android:layout_height="wrap_content"
  4.       style="?android:attr/progressBarStyleLarge">
  5. </ProgressBar>
复制代码


小号圆形ProgressBar


5.png 

小号ProgressBar对应的风格是:
  1. style="?android:attr/progressBarStyleSmall"
复制代码
完整XML定义是:
  1. <progressBar android:id="@+id/widget108"
  2.       android:layout_width="wrap_content" 
  3.       android:layout_height="wrap_content"
  4.       style="?android:attr/progressBarStyleSmall">
  5. </ProgressBar>
复制代码


标题型圆形ProgressBar


6.png 

8.png 

标题型ProgressBar对应的风格是:
  1. style="?android:attr/progressBarStyleSmallTitle"
复制代码
完整XML定义是:
  1. <progressBar android:id="@+id/widget110"
  2.     android:layout_width="wrap_content" 
  3.     android:layout_height="wrap_content"
  4.     style="?android:attr/progressBarStyleSmallTitle">
  5. </ProgressBar>
复制代码
代码中实现:
  1. @Override
  2.     protected void onCreate(Bundle savedInstanceState) {
  3.         // TODO Auto-generated method stub
  4.         super.onCreate(savedInstanceState);
  5.         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  6.         //请求窗口特色风格,这里设置成不明确的进度风格
  7.         setContentView(R.layout.second);
  8.         setProgressBarIndeterminateVisibility(true);
  9.         //设置标题栏中的不明确的进度条是否可以显示
  10.     }
复制代码


长形进度条


布局中的长形进度条

2.png 
①首先在XML进行布局
  1. <progressBar android:id="@+id/progressbar_updown"
  2.         android:layout_width="200dp" 
  3.         android:layout_height="wrap_content"
  4.         style="?android:attr/progressBarStyleHorizontal"
  5.         android:layout_gravity="center_vertical" 
  6.         android:max="100"
  7.         android:progress="50"
  8.         android:secondaryProgress="70"    >
复制代码
讲解:
style="?android:attr/progressBarStyleHorizontal"   
设置风格为长形 
android:max="100"   
最大进度值为100
android:progress="50"  
初始化的进度值
android:secondaryProgress="70" 
初始化的底层第二个进度值 
android:layout_gravity="center_vertical"   
垂直居中


②代码中运用
  1. private ProgressBar myProgressBar;
  2. //定义ProgressBar
  3. myProgressBar = (ProgressBar) findViewById(R.id.progressbar_updown);
  4. //ProgressBar通过ID来从XML中获取
  5. myProgressBar.incrementProgressBy(5);
  6. //ProgressBar进度值增加5
  7. myProgressBar.incrementProgressBy(-5);
  8. //ProgressBar进度值减少5
  9. myProgressBar.incrementSecondaryProgressBy(5);
  10. //ProgressBar背后的第二个进度条 进度值增加5
  11. myProgressBar.incrementSecondaryProgressBy(-5);
  12. //ProgressBar背后的第二个进度条 进度值减少5
复制代码



页面标题中的长形进度条


7.png 
代码实现:
①先设置一下窗口风格特性
  1. requestWindowFeature(Window.FEATURE_PROGRESS);
  2. //请求一个窗口进度条特性风格
  3. setContentView(R.layout.main);
  4. setProgressBarVisibility(true);
  5. //设置进度条可视
复制代码
②然后设置进度值
  1. setProgress(myProgressBar.getProgress() * 100);
  2. //设置标题栏中前景的一个进度条进度值
  3. setSecondaryProgress(myProgressBar.getSecondaryProgress() * 100);
  4. //设置标题栏中后面的一个进度条进度值
  5. //ProgressBar.getSecondaryProgress() 是用来获取其他进度条的进度值
复制代码


ProgressDialog

ProgressDialog中的圆形进度条
device-ra.png    device-rb.png   
ProgressDialog一般用来表示一个系统任务或是开启任务时候的进度,有一种稍等的意思。
代码实现:

  1.   ProgressDialog mypDialog=new ProgressDialog(this);
  2.             //实例化
  3.             mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  4.             //设置进度条风格,风格为圆形,旋转的
  5.             mypDialog.setTitle("Google");
  6.             //设置ProgressDialog 标题
  7.             mypDialog.setMessage(getResources().getString(R.string.second));
  8.             //设置ProgressDialog 提示信息
  9.             mypDialog.setIcon(R.drawable.android);
  10.             //设置ProgressDialog 标题图标
  11.             mypDialog.setButton("Google",this);
  12.             //设置ProgressDialog 的一个Button
  13.             mypDialog.setIndeterminate(false);
  14.             //设置ProgressDialog 的进度条是否不明确
  15.             mypDialog.setCancelable(true);
  16.             //设置ProgressDialog 是否可以按退回按键取消
  17.             mypDialog.show();
  18.             //让ProgressDialog显示
复制代码



ProgressDialog中的长形进度条
      
device-ca.png device-cb.png 
代码实现:
  1. ProgressDialog mypDialog=new ProgressDialog(this);
  2. //实例化
  3.             mypDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  4.             //设置进度条风格,风格为长形,有刻度的
  5.             mypDialog.setTitle("地狱怒兽");
  6.             //设置ProgressDialog 标题
  7.             mypDialog.setMessage(getResources().getString(R.string.second));
  8.             //设置ProgressDialog 提示信息
  9.             mypDialog.setIcon(R.drawable.android);
  10.             //设置ProgressDialog 标题图标
  11.             mypDialog.setProgress(59);
  12.             //设置ProgressDialog 进度条进度
  13.             mypDialog.setButton("地狱曙光",this);
  14.             //设置ProgressDialog 的一个Button
  15.             mypDialog.setIndeterminate(false);
  16.             //设置ProgressDialog 的进度条是否不明确
  17.             mypDialog.setCancelable(true);
  18.             //设置ProgressDialog 是否可以按退回按键取消
  19.             mypDialog.show();
  20.             //让ProgressDialog显示   
复制代码



AlertDialog.Builder

AlertDialog中的圆形ProgressBar
device-ma.png 
①先来设计一个Layout,待会儿作为一个View,加入AlertDialog.Builder
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_gravity="center_horizontal" 
  4.     android:layout_width="wrap_content"
  5.     android:layout_height="wrap_content">
  6.     <LinearLayout android:id="@+id/LinearLayout01"
  7.     android:layout_width="wrap_content" 
  8.     android:layout_height="wrap_content">
  9. </LinearLayout>
  10.     <ProgressBar android:layout_gravity="center_vertical|center_horizontal"
  11.         android:layout_height="wrap_content" 
  12.         android:progress="57"
  13.         android:id="@+id/myView_ProgressBar2" 
  14.         android:layout_width="wrap_content">
  15. </ProgressBar>
  16. </LinearLayout>
复制代码
②代码罗
  1. private AlertDialog.Builder AlterD,AlterD2;
  2. //定义提示对话框
  3. private LayoutInflater layoutInflater;
  4. //定义布局过滤器
  5. private LinearLayout myLayout;
  6. //定义布局
  7. layoutInflater2=(LayoutInflater) getSystemService(this.LAYOUT_INFLATER_SERVICE);
  8. //获得系统的布局过滤服务
  9. myLayout2=(LinearLayout) layoutInflater2.inflate(R.layout.roundprogress, null);
  10. //得到事先设计好的布局
  11. AlterD2.setTitle(getResources().getString(R.string.RoundO));
  12. //设置对话框标题
  13. AlterD2.setIcon(R.drawable.ma);
  14. //设置对话框图标
  15. AlterD2.setMessage(getResources().getString(R.string.ADDView));
  16. //设置对话框提示信息
  17. AlterD2.setView(myLayout2);
  18. //设置对话框中的View
  19. AlterD2.show();
  20. //让对话框显示
复制代码


AlertDialog中的长形ProgressBar(可控制)

device-mb.png 
①先来设计一个Layout,待会儿作为一个View,加入AlertDialog.Builder
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_gravity="center_horizontal" 
  4. android:layout_width="wrap_content"
  5.     android:layout_height="wrap_content">
  6.     <Button 
  7. android:layout_height="wrap_content" 
  8. android:text="-"
  9.         android:layout_width="50dp" 
  10. android:id="@+id/myView_BT_Down">
  11. </Button>
  12.     <ProgressBar 
  13. android:layout_gravity="center_vertical"
  14.         android:layout_height="wrap_content" 
  15. style="?android:attr/progressBarStyleHorizontal"
  16.         android:id="@+id/myView_ProgressBar" 
  17. android:progress="57"
  18.         android:layout_width="178dp">
  19. </ProgressBar>
  20.     <Button android:layout_height="wrap_content" 
  21. android:text="+"
  22.         android:layout_width="50dp" 
  23. android:id="@+id/myView_BT_Up">
  24. </Button>
  25. </LinearLayout>
复制代码
②代码罗
  1. private AlertDialog.Builder AlterD,AlterD2;
  2. //定义提示对话框
  3. private LayoutInflater layoutInflater;
  4. //定义布局过滤器
  5. private LinearLayout myLayout;
  6. //定义布局
  7. layoutInflater=(LayoutInflater) getSystemService(this.LAYOUT_INFLATER_SERVICE);
  8. //获得系统的布局过滤服务
  9. myLayout=(LinearLayout) layoutInflater.inflate(R.layout.myview, null);
  10. //得到事先设计好的布局

  11. myup=(Button) myLayout.findViewById(R.id.myView_BT_Up);
  12. mydown=(Button) myLayout.findViewById(R.id.myView_BT_Down);
  13. mypro=(ProgressBar)myLayout.findViewById(R.id.myView_ProgressBar);
  14. //通过myLayout.findViewById来获取自定义View中的Widget控件元素

  15. myup.setOnClickListener(this);
  16. //设置对话框View中的按钮监听器
  17. mydown.setOnClickListener(this);
  18. //设置对话框View中的按钮监听器
  19. mypro.setProgress(Tag);
  20. //设置一个Tag作为进度值
  21. AlterD.setTitle(getResources().getString(R.string.RectO));
  22. //设置对话框标题
  23. AlterD.setIcon(R.drawable.mb);
  24. //设置对话框图标
  25. AlterD.setMessage(getResources().getString(R.string.ADDView));
  26. //设置对话框提示信息
  27. AlterD.setView(myLayout);
  28. //设置对话框添加的View
  29. AlterD.setPositiveButton("OK", new DialogInterface.OnClickListener(){
  30.     @Override
  31.     public void onClick(DialogInterface dialog, int which) {
  32.         // TODO Auto-generated method stub
  33.         MyProgressBar.Tag=mypro.getProgress();
  34.     }});
  35. //设置对话框按钮,以及按钮的事件监听器
  36. AlterD.show();
  37. //让对话框显示
复制代码
③进度条进度值的按钮事件
  1. myup.setOnClickListener(this);
  2. //设置对话框View中的按钮监听器
  3. mydown.setOnClickListener(this);
  4. //设置对话框View中的按钮监听器
  5. 对应的代码:
  6.     @Override
  7.     public void onClick(View button) {
  8.         // TODO Auto-generated method stub
  9.         SwitchUPorDown(button);
  10.     }

  11.     private void SwitchUPorDown(View button) {
  12.         switch (button.getId()) {
  13.                 case R.id.myView_BT_Up: {
  14.             mypro.incrementProgressBy(1);    
  15.         }
  16.             break;
  17.         case R.id.myView_BT_Down: {
  18.             mypro.incrementProgressBy(-1);
  19.         }
  20.             break;
  21.         default:
  22.             break;
  23.         }
  24.     }
复制代码


App Widget中的进度条



Widget中的圆形ProgressBar

这个很简单,在Widget中没有多大意思,不再敷述。

Widget中的长形ProgressBar(可控制)
device-widget.png 
Widget的实现就不再重复,假设您已经把Widget布局,相应设置已经设置好了。也可以在桌面加入类似上面图中的样式。
现在我们来实现一下按钮事件,与进度条的交互。
下面还是简单讲解一下Widget的设计与部署。


①设计Widget布局
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout 
  3.     xmlns:android="http://schemas.android.com/apk/res/android"
  4.     android:background="@drawable/widget" 
  5.     android:layout_height="74dp" 
  6.     android:layout_width="296dp">
  7.     <Button 
  8.         android:layout_height="wrap_content" 
  9.         android:text="-" 
  10.         android:layout_gravity="center_vertical"
  11.         android:layout_width="50dp" 
  12.         android:id="@+id/widget_BT_Down" 
  13.         android:layout_marginLeft="10dp">
  14.     </Button>
  15.     <ProgressBar 
  16.         android:layout_gravity="center_vertical"
  17.         android:layout_height="wrap_content" 
  18.         style="?android:attr/progressBarStyleHorizontal"
  19.         android:layout_width="178dp" 
  20.         android:id="@+id/widget_ProgressBar">
  21.    </ProgressBar>
  22.     <Button 
  23.         android:layout_height="wrap_content" 
  24.         android:text="+" 
  25.         android:layout_gravity="center_vertical"
  26.         android:layout_width="50dp" 
  27.         android:id="@+id/widget_BT_Up">
  28.    </Button>
  29. </LinearLayout>
复制代码
②新增一个.res/xml目录,加入appwidget-provider
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <appwidget-provider 
  3.     xmlns:android="http://schemas.android.com/apk/res/android"
  4.     android:initialLayout="@layout/widgetlayout"
  5.     android:updatePeriodMillis="8660000" 
  6.     android:minWidth="296dp"
  7.     android:minHeight="74dp">
  8. </appwidget-provider>
复制代码
③实现一个AppWidgetProvider子类
  1. package zyf.test.ProgressBar;
  2. import android.appwidget.AppWidgetManager;
  3. import android.appwidget.AppWidgetProvider;
  4. import android.content.Context;
  5. import android.content.Intent;

  6. public class App extends AppWidgetProvider {

  7.     @Override
  8.     public void onEnabled(Context context) {
  9.         // TODO Auto-generated method stub
  10.         super.onEnabled(context);
  11.     }

  12.     @Override
  13.     public void onReceive(Context context, Intent intent) {
  14.         // TODO Auto-generated method stub
  15.         super.onReceive(context, intent);
  16.     }

  17.     @Override
  18.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
  19.             int[] appWidgetIds) {
  20.         // TODO Auto-generated method stub
  21.         super.onUpdate(context, appWidgetManager, appWidgetIds);
  22.     }

  23. }
复制代码
④配置Manifest,进行注册
  1. <receiver android:name="AppWidget">
  2.     <intent-filter>
  3.     <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
  4.     </intent-filter>
  5.     <meta-data  
  6.         android:resource="@xml/appwidget" 
  7.         android:name="android.appwidget.provider">
  8.     </meta-data>
  9. </receiver>
复制代码
这里实现按钮与进度条的交互。(Widget自己广播发送与接收)

①按钮的消息发送
  1. @Override
  2.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
  3.             int[] appWidgetIds) {
  4.         // TODO Auto-generated method stub
  5.         final int N = appWidgetIds.length;

  6.         // Perform this loop procedure for each App Widget that belongs to this provider
  7.         for (int i=0; i<N; i++) {
  8.             int appWidgetId = appWidgetIds;
  9.             RemoteViews views=
  10. new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
  11.             
  12.             Intent UPintent=new Intent("zyf.test.widget.UP");
  13.             Intent DOWNintent=new Intent("zyf.test.widget.DOWN");
  14.             //实例化 两个带有Action的Intent
  15.             PendingIntent pendingIntentUp
  16. =PendingIntent.getBroadcast(context, 0, UPintent, 0);
  17.             PendingIntent pendingIntentDown
  18. =PendingIntent.getBroadcast(context, 0, DOWNintent, 0);
  19.             //实例化两个以Intent来构造的PendingIntent
  20.             views.setOnClickPendingIntent(R.id.widget_BT_Up, pendingIntentUp);
  21.             views.setOnClickPendingIntent(R.id.widget_BT_Down, pendingIntentDown);
  22.             //给View上的两个按钮绑定事件,这里是广播消息的发送
  23.             appWidgetManager.updateAppWidget(appWidgetId, views);
  24.         }
  25.     }
复制代码
②Widget自身消息接收,使用intent.getAction()来获取Action
  1. @Override
  2.     public void onReceive(Context context, Intent intent) {
  3.         // TODO Auto-generated method stub
  4.         super.onReceive(context, intent);
  5.         if(intent.getAction().equals("zyf.test.widget.UP")){
  6.             Tag+=5;
  7.             if(Tag>100){
  8.                 Tag=100;
  9.             }
  10.             views.setProgressBar(R.id.widget_ProgressBar, 100, Tag, false);
  11.             appManager.updateAppWidget(thisWidget, views);
  12.         }
  13.         if(intent.getAction().equals("zyf.test.widget.DOWN")){
  14.             Tag-=5;
  15.             if(Tag<0){
  16.                 Tag=0;
  17.             }
  18.             views.setProgressBar(R.id.widget_ProgressBar, 100, Tag, false);
  19.             appManager.updateAppWidget(thisWidget, views);
  20.         }
  21.     }
复制代码
③进度条的进度值设置
  1. views.setProgressBar(R.id.widget_ProgressBar, 100, Tag, false);
  2. //设置Widget上的进度条的进度值
  3. //第一个参数,Widget上进度条ID
  4. //第二个参数,进度条最大值
  5. //第三个参数Tag,一个int值,就是设置的进度值
  6. //第四个参数,是否是要进度条不确定
复制代码
注意了,Widget自身的onReceive()方法如果要接收其他的Action广播。那就必须在Manifest中,在Intent-filter中添加Action:
  1. <receiver android:name="AppWidget">
  2.     <intent-filter>
  3.         <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
  4.                 <action android:name="zyf.test.widget.UP"></action>
  5.                 <action android:name="zyf.test.widget.DOWN"></action>
  6.     </intent-filter>
  7.     <meta-data
  8.         android:resource="@xml/appwidget"
  9.         android:name="android.appwidget.provider">
  10.     </meta-data>
  11. </receiver>

分享到:
评论

相关推荐

    android用户界面之ProgressBar教程实例汇总

    用户界面是android开发中最基础的功能,也是与用户... 现在特地总结了Android用户界面之progressBar的相关信息,分三个方面进行说明的,希望可以对学习 安卓开发 的朋友们有些帮助,也希望能不断补充新的学习内容。

    安卓基本知识总结

    安卓基本知识总结,包括GridView,Spanner,ProgressBar,Fragment,WebView,ListView等

    JQuery教程自学笔记总结

    JQuery教程自学笔记总结 1 一、概述 4 二、JQuery技术综述 5 2.1 JQuery基本语法 5 2.1.1 JQuery选择器 6 2.2 JQuery事件响应 8 2.2.1 常见的JQuery事件 9 2.2.2 淡入淡出效果 12 2.2.3 滑动效果 15 2.2.4 ...

    winfrom进度条、假死处理小示例

    winfrom进度条、假死处理小示例总结

    DataGridView 使用方法总结

    DataGridView控件用法合集 ...57. DataGridView中显示进度条(ProgressBar) 58. DataGridView中添加MaskedTextBox 59. DataGridView中Enter键按下焦点移至旁边的单元格 60. DataGridView行集合化(Group)

    GridView用法总结

    目录 ...57. DataGridView中显示进度条(ProgressBar) 147 58. DataGridView中添加MaskedTextBox 176 59. DataGridView中Enter键按下焦点移至旁边的单元格 202 60. DataGridView行集合化(Group) 205

    Jquery进度条插件 Progress Bar小问题解决

    个人使用总结: 代码如下: [removed][removed] [removed][removed]【Progresbar插件很重要】 [removed] $(document).ready(function () { $(“#progress1”).progressBar(68, { b

    android开发资料大全

    最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 Android入门逆引手册 Android...

    Android开发之基本控件和四种布局方式详解

    今天这篇博客就总结一下Android中常用的基本控件以及布局方式。说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局。而在Android中的布局方式就比较丰富了,今天博客中会介绍四种...

    asp.net知识库

    简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了...

Global site tag (gtag.js) - Google Analytics