当前位置:  编程技术>移动开发
本页文章导读:
    ▪运用代码创建ProgressBar        使用代码创建ProgressBar   在自己的项目中,遇到了代码创建ProgressBar,无法更改样式等问题。在交流群里,也有人问过! 今天我就结合我查的资料和大家交流一下。   Java代码   ProgressBar.........
    ▪ 异步讯息的传递-回调机制        异步消息的传递-回调机制 1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等.........
    ▪ E71手机装配win98       E71手机安装win98 1、安装98教程: 1论坛搜S60的DosBox完全版 先安装install里的驱动文件,再安装dosbox full在手机c盘 2下载windows98的镜像文件,解压img文件放在e:\dos\windows (没有自建) 3下载配置.........

[1]运用代码创建ProgressBar
    来源: 互联网  发布时间: 2014-02-18
使用代码创建ProgressBar

 

在自己的项目中,遇到了代码创建ProgressBar,无法更改样式等问题。在交流群里,也有人问过!

今天我就结合我查的资料和大家交流一下。

 

Java代码  
  • ProgressBar mProgressBar=new ProgressBar(context);   
  • this.addView(mImageView,0);  
  • ProgressBar mProgressBar=new ProgressBar(context);
    this.addView(mImageView,0);

     

     这样,可以用代码创建一个ProgressBar,可是怎么把的样式改成横条状呢?

    在使用XML文件来布局时,会使用style来设置:

     

    Java代码
  •   
  • 
    

     

     可是我们有代码怎么来设置呢?没ProgressBar.setStyle()方法啊!

    查了一下高手写的文章,了理到从源码中可以看出progressBarStyleHorizontal也是一个布局罢了

    源码如下:

     

    Xml代码  
  • <ProgressBar android:layout_width="fill_parent"  
  •   
  • android:layout_height="wrap_content"  
  •   
  • android:indeterminateOnly="false"  
  •   
  • android:progressDrawable="@android:drawable/progress_horizontal"  
  •   
  • android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"  
  •   
  • android:minHeight="20dip"  
  •   
  • android:maxHeight="20dip" />  
  • <ProgressBar android:layout_width="fill_parent"
    
    android:layout_height="wrap_content"
    
    android:indeterminateOnly="false"
    
    android:progressDrawable="@android:drawable/progress_horizontal"
    
    android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
    
    android:minHeight="20dip"
    
    android:maxHeight="20dip" />
    

     

     

     

    我们可以通过代码来设置:

     

    Java代码  
  • mProgressBar.setIndeterminate(false);   
  • mProgressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));   
  • mProgressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));  
  • mProgressBar.setIndeterminate(false);
    mProgressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
    mProgressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));

     这样就可以实现ProgressBar的条状布局了!

    可这时,我们又会发现ProgressBar的进度,无法刷新

    原因是XML文件中的android:indeterminateOnly="false"和 代码中的progressBar.setIndeterminate(false)并不完全一样。布局文件的属性有一个Only结尾但代码中并没有,而查找Api发现并没有setIndeterminateOnly这样的一个方法。

    看一下ProgressBar的源码我们会发现ProgressBar中有两个私有变量:mOnlyIndeterminate和mIndeterminate。而程序没有提供设置mOnlyIndeterminate的方法。

    这里我们可以使用Java的反射机制来设置。

    我们写一个通用的BeanUtils类来进行反射操作:

     

    Java代码  
  • public class BeanUtils {   
  •     private BeanUtils() {   
  •   
  •     }   
  •   
  •     /**  
  •      * 直接设置对象属性值,无视private/protected修饰符,不经过setter函数.  
  •      */  
  •     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) {   
  •         Log.e("zbkc", "", e);   
  •         }   
  •     }   
  •   
  •     /**  
  •      * 循环向上转型,获取对象的DeclaredField.  
  •      */  
  •     protected static Field getDeclaredField(final Object object, final String fieldName) {   
  •         return getDeclaredField(object.getClass(), fieldName);   
  •     }   
  •   
  •     /**  
  •      * 循环向上转型,获取类的DeclaredField.  
  •      */  
  •     @SuppressWarnings("unchecked")   
  •     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) {   
  •                 // Field不在当前类定义,继续向上转型   
  •             }   
  •         }   
  •         return null;   
  •     }   
  •   
  •     /**  
  •      * 强制转换fileld可访问.  
  •      */  
  •     protected static void makeAccessible(Field field) {   
  •         if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {   
  •             field.setAccessible(true);   
  •         }   
  •     }   
  • }  
  • public class BeanUtils {
        private BeanUtils() {
    
        }
    
        /**
         * 直接设置对象属性值,无视private/protected修饰符,不经过setter函数.
         */
        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) {
            Log.e("zbkc", "", e);
            }
        }
    
        /**
         * 循环向上转型,获取对象的DeclaredField.
         */
        protected static Field getDeclaredField(final Object object, final String fieldName) {
            return getDeclaredField(object.getClass(), fieldName);
        }
    
        /**
         * 循环向上转型,获取类的DeclaredField.
         */
        @SuppressWarnings("unchecked")
        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) {
                    // Field不在当前类定义,继续向上转型
                }
            }
            return null;
        }
    
        /**
         * 强制转换fileld可访问.
         */
        protected static void makeAccessible(Field field) {
            if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
                field.setAccessible(true);
            }
        }
    }

     

     

     

    然后,我们在创建ProgressBar的地方使用下面的语句设置mOnlyIndeterminate为false

     

    Java代码  
  • BeanUtils.setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false));  
  • BeanUtils.setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false));

     

     这样就实现了用代码来创建ProgressBar。

    下面是我的代码

     

    Java代码  
  • super(context);   
  • this.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));   
  • ProgressBar mProgressBar=new ProgressBar(context);   
  • BeanUtils.setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false));   
  • mProgressBar.setIndeterminate(false);   
  • mProgressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));   
  • mProgressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));   
  • mProgressBar.setLayoutParams(new FrameLayout.LayoutParams(65, 5, Gravity.CENTER_VERTICAL) );   
  • this.addView(mProgressBar,0);  

  •     
    [2] 异步讯息的传递-回调机制
        来源: 互联网  发布时间: 2014-02-18
    异步消息的传递-回调机制

    1 什么是回调

    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。


     


        
    [3] E71手机装配win98
        来源: 互联网  发布时间: 2014-02-18
    E71手机安装win98

    1、安装98教程:

    1论坛搜S60的DosBox完全版
    先安装install里的驱动文件,再安装dosbox full在手机c盘
    2下载windows98的镜像文件,解压img文件放在e:\dos\windows (没有自建)
    3下载配置文件放在e:\data文件夹下
    4运行dosbox自启动windows出 现98视窗徽标!
    5硬盘自检后进入桌面
    6等完全载入后通话键可以切换方向键鼠标操作选择键为鼠标左键
    windows98 img文件地址http://www.rayfile.com/files/e2e3c8e3-b500-11de-8191-0014221b798a/ 81.9M
    windows95img文件地址:http://www.rayfile.com/files/64c4cb8c-b500-11de-8247-0014221b798a/ 44.6M

    2、画面

    还有人在里面玩CS2.6版本的,实在是牛啊,够折腾人的。



        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3