[Android实例] android进度条对话框Demo
来源:互联网 发布:linux awk 指定匹配列 编辑:程序博客网 时间:2024/06/11 11:03
[Android实例]android进度条对话框Demo
1.简介系统ProgressDialog的主要特征
1.在ProgressDialog的源码里可以明显的看到,在STYLE_HORIZONTAL和STYLE_SPINNER分别显示的是不同的XML,这就意味着你的进度条要么是转圈,要么是条形的.
2.不管是上述的任何情况下,系统对各部分文字显示都已经完全格式化.
2.实际情况
但是实际的应用中,我们或者需要改变文字的位置,或者需要转圈和条形共存,甚至是做出完全颠覆系统进度条的个性进度条,这个时候我们必须去重新设计属于你自己的进度条.(个人一直认为应用中的组件尽量不用系统的,而是重写系统的,这样做出来的应用才是百家争鸣).
下面就实现我自己的进度条中碰到的几个可能需要注意的地方给大家交待下:
1.在系统ProgressDialog的构造函数
代码片段,双击复制
中涉及了一个theme:com.android.internal.R.style.Theme_Dialog_Alert,这是我当时遇到的第一个问题,开始的时候翻遍源码,终于在data/res/values/themes.xml里找到,
代码片段,双击复制
但是发现他还关联其他style,继续找下去,结果写到自己的XML里还是错误一大堆,最后仔细看了下,发现不就是个theme吗,这就简单了,有2种方向:1.自己写theme.2.使用系统的theme.我写的时候是
代码片段,双击复制
调用系统的android.R.style.Theme_Panel.
注意:找个地方就是你个性释放的开始.
2.我要实现的是转圈和条形并存.那么肯定得在布局文件上下手了.
找个地方分2块说.第1,布局是XML文件;2,布局是代码生成.
您可能会问,这有区别吗?事实上,区别还是蛮大的,不知道你注意到没有如下属性
style="?android:attr/progressBarStyleHorizontal"
试问,如何代码实现?
先说第1种,XML的话比较简单,因为只需要写2个ProgressBar,然后再在代码里控制visible属性就ok,在此不赘述.
第2种,style的实现,这是我碰到的第2个难点
最后我在网上找到1篇文章,关于获取父类私有属性的文章,利用反射机制实现了style的设置.
以下工具类是转载网上那位朋友的工具类,大家可以借鉴下!
代码片段,双击复制
有了上面的工具类,就可以简单的设置那些私有属性比如:
BeanUtils.setFieldValue(progress_h, "mOnlyIndeterminate", new Boolean(false));
BeanUtils.setFieldValue(progress_h, "mMinHeight", new Integer(15));
以上就是我重写进度条的全部心得,希望能对阅读完得朋友有些许帮助!
最后附上我的demo,里面我的调用的布局是代码实现的,当然也有XML的.
demo说明:功能是前30条形,30-70转圈,70-100条形 文字跟着变
1.简介系统ProgressDialog的主要特征
1.在ProgressDialog的源码里可以明显的看到,在STYLE_HORIZONTAL和STYLE_SPINNER分别显示的是不同的XML,这就意味着你的进度条要么是转圈,要么是条形的.
2.不管是上述的任何情况下,系统对各部分文字显示都已经完全格式化.
2.实际情况
但是实际的应用中,我们或者需要改变文字的位置,或者需要转圈和条形共存,甚至是做出完全颠覆系统进度条的个性进度条,这个时候我们必须去重新设计属于你自己的进度条.(个人一直认为应用中的组件尽量不用系统的,而是重写系统的,这样做出来的应用才是百家争鸣).
下面就实现我自己的进度条中碰到的几个可能需要注意的地方给大家交待下:
1.在系统ProgressDialog的构造函数
01
02
03
04
05
06
07
public
ProgressDialog(Context
context)
<P p
{
this
(context,
com.android.internal.R.style.Theme_Dialog_Alert);
}
中涉及了一个theme:com.android.internal.R.style.Theme_Dialog_Alert,这是我当时遇到的第一个问题,开始的时候翻遍源码,终于在data/res/values/themes.xml里找到,
01
02
03
04
05
<style name=
"Theme.Dialog.Alert"
><item name=
"windowBackground"
>
@android
:color/transparent</item>
<item name=
"windowTitleStyle"
>
@android
:style/DialogWindowTitle</item>
<item name=
"windowIsFloating"
>
true
</item>
<item name=
"windowContentOverlay"
>
@null
</item>
</style>
但是发现他还关联其他style,继续找下去,结果写到自己的XML里还是错误一大堆,最后仔细看了下,发现不就是个theme吗,这就简单了,有2种方向:1.自己写theme.2.使用系统的theme.我写的时候是
01
02
03
04
public
ProgressDialog1(Context context) {
this
(context, android.R.style.Theme_Panel);
mContext = context;
}
调用系统的android.R.style.Theme_Panel.
注意:找个地方就是你个性释放的开始.
2.我要实现的是转圈和条形并存.那么肯定得在布局文件上下手了.
找个地方分2块说.第1,布局是XML文件;2,布局是代码生成.
您可能会问,这有区别吗?事实上,区别还是蛮大的,不知道你注意到没有如下属性
style="?android:attr/progressBarStyleHorizontal"
试问,如何代码实现?
先说第1种,XML的话比较简单,因为只需要写2个ProgressBar,然后再在代码里控制visible属性就ok,在此不赘述.
第2种,style的实现,这是我碰到的第2个难点
最后我在网上找到1篇文章,关于获取父类私有属性的文章,利用反射机制实现了style的设置.
以下工具类是转载网上那位朋友的工具类,大家可以借鉴下!
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public
class
BeanUtils {
private
BeanUtils() {
}
public
static
void
setFieldValue(
final
Object object,
final
String fieldName,
final
Object value) {
Field field = getDeclaredField(object, fieldName);
if
(field ==
null
)
throw
new
IllegalArgumentException(
"Could not find field ["
+ fieldName +
"] on target ["
+ object +
"]"
);
makeAccessible(field);
try
{
field.set(object, value);
}
catch
(IllegalAccessException e) {
}
}
protected
static
Field getDeclaredField(
final
Object object,
final
String fieldName) {
return
getDeclaredField(object.getClass(), fieldName);
}
protected
static
Field getDeclaredField(
final
Class clazz,
final
String fieldName) {
for
(Class superClass = clazz; superClass != Object.
class
; superClass = superClass
.getSuperclass()) {
try
{
return
superClass.getDeclaredField(fieldName);
}
catch
(NoSuchFieldException e) {
}
}
return
null
;
}
protected
static
void
makeAccessible(Field field) {
if
(!Modifier.isPublic(field.getModifiers())
|| !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
field.setAccessible(
true
);
}
}
}
有了上面的工具类,就可以简单的设置那些私有属性比如:
BeanUtils.setFieldValue(progress_h, "mOnlyIndeterminate", new Boolean(false));
BeanUtils.setFieldValue(progress_h, "mMinHeight", new Integer(15));
以上就是我重写进度条的全部心得,希望能对阅读完得朋友有些许帮助!
最后附上我的demo,里面我的调用的布局是代码实现的,当然也有XML的.
demo说明:功能是前30条形,30-70转圈,70-100条形 文字跟着变
- [Android实例] android进度条对话框Demo
- android进度条对话框Demo
- Android 环形进度条Demo
- Android ProgressDialog进度条对话框
- 【Android】对话框之进度条
- 【Android】进度条对话框ProgressDialog
- Android开发:进度条对话框
- Android--圆形进度条对话框
- Android--水平进度条对话框
- Android ProgressDialog 进度条对话框
- Android 系统对话框demo
- 【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框
- 【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框
- Android之ProgressBar ProgressDialog 进度条 进度条对话框
- Android进度条实例
- Android 对话框中的进度条 ProgressDialog
- Android 对话框中的进度条 ProgressDialog
- Android 对话框中的进度条 (ProgressDialog)
- 2013-10-31 几点注意
- 常见面试之机器学习算法思想简单梳理
- jis
- 树和二叉树在java中
- hdu 2205
- [Android实例] android进度条对话框Demo
- PHP下载远程文件
- ContentValues 的使用
- 在dom4j中实现xml文件输出格式的设置
- ORACLE_EBS(PM)项目应用手机审批
- __attribute__机制介绍
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- 数据泵执行导入导出
- UVa 414 - Machined Surfaces