- 浏览: 205914 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xumin_minzi:
我也在使用ndk编译,ffmpeg源码放在哪个目录里面?
[原创]Android ndkr8编译 FFmpeg 0.11.1 "Happiness" -
ericchan2012:
在Dialog调用show方法之后
【原创】Android 设置Dialog的长宽和位置 -
maohualei:
求解: 我设置的时候 位置居然没有反应 dial ...
【原创】Android 设置Dialog的长宽和位置
说到ProgressDialog和ProgressBar,相信大家不陌生吧,就是比如导入联系人的时候会出现一个进度条的控件,或者下载的时候的进度条。
首先说一下ProgressBar:
既然要更新UI,在android中,一般是不在主线程也就是Activity所在的那个线程来做些费时的操作的,因为这样会阻塞主线程,导致出现ANR错误。因此,一般是新开一个线程来做费时的操作,当然,做操作的时候又要通知前端的主线程来更新界面,这样能让用户知道在做操作啊,因此,就需要使用android中的线程通信Handler了。好了。下面是示例:
1,写好一个带progressbar的xml布局文件:
2,Activity代码:
当然,这里涉及两种progressbar,一种是进度条的,一种是环形的,另外这里的线程停止方式,还可以有另外的方式,就是设置一个boolean变量来控制线程的停止。
再说一下ProgressDialog的用法;示例代码:
1,也是先看布局:
2,再看Activity代码:
很简单吧,主要使用的android中线程之间的通信机制Handler。
首先说一下ProgressBar:
既然要更新UI,在android中,一般是不在主线程也就是Activity所在的那个线程来做些费时的操作的,因为这样会阻塞主线程,导致出现ANR错误。因此,一般是新开一个线程来做费时的操作,当然,做操作的时候又要通知前端的主线程来更新界面,这样能让用户知道在做操作啊,因此,就需要使用android中的线程通信Handler了。好了。下面是示例:
1,写好一个带progressbar的xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ProgressBar android:id="@+id/rectangleProgressBar" style="?android:attr/progressBarStyleHorizontal" mce_style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone" /> <ProgressBar android:id="@+id/circleProgressBar" style="?android:attr/progressBarStyleLarge" mce_style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> <Button android:id="@+id/button" android:text="Show ProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
2,Activity代码:
public class ProgressBarDemo extends Activity { private ProgressBar rectangleProgressBar,circleProgressBar; private Button mButton; protected static final int STOP = 0x10000; protected static final int NEXT = 0x10001; private int iCount = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //findView By id rectangleProgressBar = (ProgressBar)findViewById(R.id.rectangleProgressBar); circleProgressBar = (ProgressBar)findViewById(R.id.circleProgressBar); mButton = (Button)findViewById(R.id.button); rectangleProgressBar.setIndeterminate(false); circleProgressBar.setIndeterminate(false); mButton.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { rectangleProgressBar.setVisibility(View.VISIBLE); circleProgressBar.setVisibility(View.VISIBLE); rectangleProgressBar.setMax(100); rectangleProgressBar.setProgress(0); circleProgressBar.setProgress(0); //创建一个线程,每秒步长为5增加,到100%时停止 Thread mThread = new Thread(new Runnable() { public void run() { for(int i=0 ; i < 20; i++){ try{ iCount = (i + 1) * 5; Thread.sleep(1000); if(i == 19){ Message msg = new Message(); msg.what = STOP; mHandler.sendMessage(msg); break; }else{ Message msg = new Message(); msg.what = NEXT; mHandler.sendMessage(msg); } }catch (Exception e) { e.printStackTrace(); } } } }); mThread.start(); } }); } //定义一个Handler private Handler mHandler = new Handler(){ public void handleMessage(Message msg){ switch (msg.what) { case STOP: rectangleProgressBar.setVisibility(View.GONE); circleProgressBar.setVisibility(View.GONE); Thread.currentThread().interrupt(); break; case NEXT: if(!Thread.currentThread().isInterrupted()){ rectangleProgressBar.setProgress(iCount); circleProgressBar.setProgress(iCount); } break; } } }; }
当然,这里涉及两种progressbar,一种是进度条的,一种是环形的,另外这里的线程停止方式,还可以有另外的方式,就是设置一个boolean变量来控制线程的停止。
再说一下ProgressDialog的用法;示例代码:
1,也是先看布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/status" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/beginBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="begin" /> </LinearLayout>
2,再看Activity代码:
public class ProgressBarDemo extends Activity { private TextView statusTextView; private Button beginBtn; private ProgressDialog progressDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); statusTextView = (TextView)findViewById(R.id.status); beginBtn = (Button)findViewById(R.id.beginBtn); setListener(); } /** * 用Handler来更新UI */ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //关闭ProgressDialog progressDialog.dismiss(); //更新UI statusTextView.setText("Completed!"); }}; /** * 点击按钮事件listener */ private void setListener(){ beginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //显示ProgressDialog progressDialog = ProgressDialog.show(ProgressBarDemo.this, "Loading...", "Please wait...", true, false); //新建线程 new Thread(){ @Override public void run() { //需要花时间计算的方法 Calculation.calculate(4); //向handler发消息 handler.sendEmptyMessage(0); }}.start(); } }); } class Calculation { public static void calculate(int sleepSeconds){ try { Thread.sleep(sleepSeconds * 1000); } catch (Exception e) { // TODO: handle exception } } } }
很简单吧,主要使用的android中线程之间的通信机制Handler。
发表评论
-
android java调用命令行给文件赋权限
2012-09-27 18:18 1657public void chmodFiles(){ Pr ... -
InputStream,String,File相互转化
2012-09-27 18:10 10181. String --> InputStream I ... -
android Uri获取真实路径转换成File的方法
2012-09-27 18:07 1915有的时候要将android uri如content://med ... -
android将路径转化为URI
2012-09-27 18:06 6455如果已經取得了檔案的路徑的字串,那怎麼轉成URI呢? St ... -
如何向android的setting语言列表中添加一门语言(
2012-09-27 12:59 1154如题: 看了下,android2. ... -
android更改暗码
2012-09-26 13:31 1059在Contact应用程序下的SpecialCharSequen ... -
android触屏震动以及震动强度修改
2012-09-26 09:24 4047PhoneWindowManager.java: 在inter ... -
android修改默认语言
2012-09-26 09:24 1494在build/tools/Buildinfo.sh下面 e ... -
android设置默认壁纸
2012-09-25 12:48 15991,动态壁纸 在frameworks\base\core\re ... -
android设置wallpaper
2012-09-25 12:00 1306设置壁纸的代码在 Launcher.java中的case Ad ... -
android Settings中的各个默认设置
2012-09-25 11:07 995在android中,Settings中有许多的默认设置,比如默 ... -
android 调用camera相关操作
2012-09-21 22:11 10531,通过intent调用camera Intent int ... -
android gallery相关操作
2012-09-21 20:11 9941,android调用gallery获取图片 Intent ... -
android中shape
2012-09-15 12:35 7961,作用: 可以在xml中定义图形,并且定义一些效果 2,用法 ... -
android中layer-list
2012-09-15 12:27 10521,作用: 可以将多个图片(图层)按照顺序层叠起来。 2,用法 ... -
android客户端连接人人网之二----获取朋友信息
2012-09-13 15:31 9421,http请求,将paramList发送到http://ap ... -
android客户端连接人人网之二----获取签名
2012-09-13 14:19 1100官方文档: http://dev.xiaonei.com/wi ... -
android客户端连接人人网之一----获取授权
2012-09-13 14:06 1129连接人人网,有两种方法,参考人人网的官网: http://wi ... -
android美化ToggleButton
2012-09-12 09:55 22091、设置XML属性 我们需要设置Toggle ... -
android复合控件
2012-09-11 20:14 1116自定义组合控件,用来复用 其一: 首先看布局文件: <? ...
相关推荐
在Android 3.0(API level 11)之后,官方推荐使用其他方式,例如使用ProgressBar嵌入在布局中来代替ProgressDialog。但为了兼容性,我们可以继续使用ProgressDialog,尤其是在较低版本的Android系统中。 创建一个...
最后,值得注意的是,由于Android设计指南推荐使用更现代的组件(如ProgressBar和Snackbar)来替换ProgressDialog,因此在新的项目中,开发者可能会选择使用这些替代方案。然而,在某些特定场景下,ProgressDialog...
在这个简单的示例中,我们将深入探讨如何在Android应用中使用ProgressDialog,并通过一个名为"ProgressBarDemo"的项目来演示其基本用法。 首先,我们需要在布局文件中定义ProgressDialog。在XML布局文件中,虽然...
在Android开发中,ProgressDialog是一个非常常见的组件,通常用于在后台执行任务时向用户展示一个进度指示器,以告知用户应用程序正在处理数据。然而,系统默认的ProgressDialog样式可能无法满足所有设计需求,这时...
在Android开发中,ProgressDialog是一种常见的UI元素,用于在应用程序执行长时间操作时向用户显示进度,如数据加载或保存。为了提供更好的用户体验,开发者有时会希望自定义ProgressDialog,使其与应用的风格保持...
同时,使用ProgressDialog或ProgressBar显示网络请求进度,让用户知道应用程序仍在运行。 最后,为了提高安全性,应用应遵循安全最佳实践,如使用HTTPS防止中间人攻击,使用哈希和盐值对密码进行加密存储,避免明文...
本篇文章将详细讲解Android的四大布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)以及网格布局(GridLayout),以及如何使用AlertDialog、ProgressBar和ProgressDialog这三个...
在现代Android开发中,考虑到ProgressDialog的阻塞特性,推荐使用`ProgressBar`配合`AsyncTask`或者`LiveData`来实现非阻塞的进度提示。这种方式允许用户与应用程序的其他部分交互,提供更好的用户体验。 `...
使用`android.widget.ProgressBar`并设置`style`为`@android:style/Widget.ProgressBar.Horizontal`即可。开发者可以通过`setProgress()`方法更新进度值,`setMax()`设定最大值。此外,还可以使用`indeterminate`...
然而,随着Android设计指南的更新,`ProgressDialog`逐渐被非模态的`ProgressBar`所取代。`ProgressBar`可以无缝集成到布局中,不影响用户与应用的其他部分交互。例如,一个水平的进度条可以这样添加到布局XML中: ...
通过ProgressDialog或ProgressBar,我们可以创建一个可视化的进度指示器,使用户了解操作的进度并保持耐心。 总之,掌握Android Studio中各种对话框的使用技巧是提升Android应用用户体验的关键。从简单到复杂,从...
其次,为了显示下载进度,我们需要使用ProgressBar或者ProgressDialog。ProgressBar是线性或圆形的进度条,而ProgressDialog则是一个弹出式对话框,通常包含一个圆形进度条。在下载过程中,我们可以监听网络请求的...
更高级的特效包括动画(如淡入淡出)、自定义字体、动态文本更新以及使用Spannable对象来实现文本的一部分有不同的样式或交互。 在这个`Android demo`中,很可能是通过自定义`ProgressDialog`的行为来展示如何在...
在Android中,我们可以使用`AlertDialog`、`ProgressDialog`或自定义布局来创建对话框。创建对话框时,需要定义对话框的内容、按钮以及它们的点击事件处理。 例如,如果你有一个点击图片触发对话框的需求,可以这样...
首先,`Toast`是Android中最简单的弹出窗口形式,它用于显示简短的信息,然后在一段时间后自动消失。创建Toast非常简单,只需要调用`Toast.makeText()`方法,传入上下文、消息文本和持续时间(短时间或长时间)。...
然而,由于ProgressDialog在Android P(API 28)及更高版本中已被弃用,我们推荐使用AlertDialog配合ProgressBar来实现类似功能: ```java // 创建一个Builder AlertDialog.Builder builder = new AlertDialog....
在Android中,我们可以使用`ProgressDialog`或自定义的`View`来展示加载效果。例如,`ProgressBar`是一个简单的进度条,而`CircleProgressView`则提供更美观的环形加载动画。加载效果的启动和关闭可以通过`...
这就是在Android Studio中创建一个简单的使用ProgressDialog的应用的基本步骤。在实际项目中,你可能需要根据具体需求调整ProgressDialog的样式、文本信息,以及后台任务的实现方式。这个例子展示了如何在用户等待...
随着Android版本的更新,ProgressDialog已被弃用,推荐使用`ProgressBar`结合`AlertDialog`自定义实现。 3. **DatePickerDialog 和 TimePickerDialog** 这两种对话框分别用于选择日期和时间。它们提供了用户友好的...
Dialog是Android系统提供的一种用于与用户交互的组件,它通常在主界面之上弹出,显示一些提示信息或进行一些简单的操作。AlertDialog是Dialog的一种子类,提供了更为丰富的样式和配置选项,包括标题、消息、按钮等。...