当前位置:  编程技术>移动开发
本页文章导读:
    ▪notification 动态批改扩展后的图标        notification 动态修改扩展后的图标 notification 修改打开之后的图片,最好的办法是使用contentView然后调用布局,然而有时候却要面临不能使用布局的情况也就是你不能使用R.layout。xx,这个样子.........
    ▪ 自定义View 及应用        自定义View 及使用 可能是一直都在做Web的富客户端开发的缘故吧,在接触Android之后,发现其控件实在惨不忍睹(不知道是否说得过于偏激),我所说的惨不忍睹的意思不是说控件难看,And.........
    ▪ 应用Iterator 或for-each注意:java.util.ConcurrentModificationException       使用Iterator 或for-each注意:java.util.ConcurrentModificationException 使用Iterator 或for-each注意:java.util.ConcurrentModificationException   http://www.blogjava.net/fingki/archive/2010/03/02/314268.html ......

[1]notification 动态批改扩展后的图标
    来源: 互联网  发布时间: 2014-02-18
notification 动态修改扩展后的图标

notification 修改打开之后的图片,最好的办法是使用contentView然后调用布局,然而有时候却要面临不能使用布局的情况也就是你不能使用R.layout。xx,这个样子你就不能动态修改icon的图标了。

 

换一个思路就是调用系统的布局 获得系统显示图片的View 然后重新设置他的图片就可以了

 

private boolean recurseGroup(ViewGroup gp)

{

   final int count = gp.getChildCount();

   

   for (int i = 0; i < count; ++i)

   {

       if (gp.getChildAt(i) instanceof ImageView)

       {   

        Bitmap mIcon=BitmapFactory.decodeResource(getResources(), R.drawable.icon);

        notification.contentView.setImageViewBitmap(((ImageView) gp.getChildAt(i)).getId(), mIcon);

      

        mNotification.notify(ID, notification);

           return true;            

       }else if (gp.getChildAt(i) instanceof ViewGroup)

           return recurseGroup((ViewGroup) gp.getChildAt(i));

   }

   return false;

}

这里是方法  注意我这里为了测试 mIcon还是调用了系统图标,而在我的项目中是不能使用资源文件的,这里尽是测试。

调用

 

notification.setLatestEventInfo(this, "消息", "Hello Android", pi);

LinearLayout group = new LinearLayout(this);

        ViewGroup event = (ViewGroup) notification.contentView.apply(this, group);

        recurseGroup(event);


    
[2] 自定义View 及应用
    来源: 互联网  发布时间: 2014-02-18
自定义View 及使用
可能是一直都在做Web的富客户端开发的缘故吧,在接触Android之后,发现其控件实在惨不忍睹(不知道是否说得过于偏激),我所说的惨不忍睹的意思不是说控件难看,Android的控件非常漂亮,这是我们公司公认的,但是最大的缺点在于控件功能非常弱小。弱小得一个Radio只能放一个text,而没有value(key)可以存放。这就是为什么我说惨不忍睹的原因。

         但是这不能怪google,毕竟才刚刚发展起来,Android提供的只是一个最基本的控件实现,而非一个完整、强大的实现。可幸的是,Android提供了自定义控件的实现。有了自定义控件,我们就可以再Android的基础控件上实现我们想要的功能了。经过一天的摸索,我终于实现了我第一个自定义的组合控件——RadioButton组合RadioGroup!

         下面我将带领大家进入Android自定义控件的世界。如果觉得我的文章能够帮助大家的话,请大方留下你的一些话语。因为你们的留言是我分享经验的精神源泉!谢谢!

         1、设置自定义控件:Android自带的RadioButton只能存放text,这不符合我们的需求,我们需要一个可以同时存放key-value对应的键值。所以我们要编写一个自定义控件能存放key-value。

                设计思路:新建一个类叫org.kandy.view.RadioButton,继承自android.wedget.RadioButton,重写父类的所有构造方法。这样我们就实现了一个跟父类一摸一样的控件。在此基础上加入我们需要的功能:加入一个属性value,用来存放RadioButton的key。

               代码如下:

public class RadioButton extends android.widget.RadioButton {

private String mValue;

public RadioButton(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
}

public String getValue() {
   return this.mValue;
}

public void setValue(String value) {
   this.mValue = value;
}
public RadioButton(Context context, AttributeSet attrs) {
   super(context, attrs);
   try {
    /**
    * 跟values/attrs.xml里面定义的属性绑定
    */
   TypedArray a = context.obtainStyledAttributes(attrs,
                 R.styleable.RadioButton);
    this.mValue = a.getString(R.styleable.RadioButton_value);
    a.recycle();
   } catch (Exception e) {
    e.printStackTrace();
   }
 
}

public RadioButton(Context context) {
   super(context);
}


}

       红色代码可以先不看。先看我们新加入的属性value,由于Android习惯属性命名以m开头。所以我们自定义控件就按照这个规则来写。不过对于setter、getter方法来说,不需要加入m。像上面的:属性名称mValue,setter:setValue(),getter:getValue()。当然,你也可以不按照Android的习惯来命名。

        这样,我们就可以使用这个自定义控件了。而且可以给它设置一个value,加上父类的text属性。我们就可以在RadioButton中加入key-value的键值了。当然,这里面的key对应是控件的value属性,value是对应控件的text属性。完了?没有。自定义控件才刚开始了。

        

          2、XML中引用自定义控件

           在XML中加入自定义控件其实很简单。只需要在控件名字前加入包名即可。如下:

<org.kandy.view.RadioButton android:id="@id/isPayDepositTrue" fsms:value="true"
       android:layout_width="wrap_content" android:layout_height="wrap_content"
       android:text="@string/yes" android:textSize="18sp">
</org.kandy.view.RadioButton>

          同样,红色部分可以先不看,也不需要加入到代码中,这个时候加入会报错,请注意。(实践不用加)

       

           3、attrs.xml属性定义。

           在我们的思想中,既然我在自定义控件中加入了一个新的属性,那么我就应该能够在xml中引用它,并对它赋初始值。我当初也是这样想的。可是却无从下手。就是这一点,折腾了我一个下午。

           正解:res/values/attrs.xml中定义属性,在自定义控件中获取这个属性,然后跟自定义控件的属性相绑定。

                attrs.xml如果没有,就新建一个。这里只存放自定义控件中需要的属性,在我看来,这个文件是一个中介,负责将layout/xx.xml里面的对这个变量的引用和自定义控件里面的属性绑定起来。

                 attrs.xml完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RadioButton"><!-- 控件名称-->
   <attr name="value" format="string"/><!-- 属性名称,类型-->
</declare-styleable>
</resources>

        如果res下没有错误的话,在R中应该就会生成这些资源的id。这样我们就能在自定义控件中引用他们。

        这里我们可能对format不是很熟悉,目前Android系统内置的格式类型有integer比如ProgressBar的进度值,float比如RatingBar的值可能是3.5颗星,boolean比如ToggleButton的是否勾选,string比如TextView的text属性,当然除了我们常见的基础类型外,Android的属性还有特殊的比如color是用于颜色属性的,可以识别为#FF0000等类型,当然还有dimension的尺寸类型,比如23dip,15px,18sp的长度单位,还有一种特殊的为reference,一般用于引用@+id/cwj @drawable/xxx这样的类型。

当然什么时候用reference呢? 我们就以定义一个颜色为例子,

<attr name="red" format="color|reference" /> 这里我们用了逻辑或的运算符,定义的红色是颜色类型的,同时可以被引用。



           4、控件属性与XML定义绑定。

           这下子我们又回到了自定义控件的编写上来了。先看看我们在第一点提到的红色字体部分。这一部分就是实现控件属性与XML定义绑定的代码。

   /**
    * 跟values/attrs.xml里面定义的属性绑定
    */
   TypedArray a = context.obtainStyledAttributes(attrs,
                 R.styleable.RadioButton);
    this.mValue = a.getString(R.styleable.RadioButton_value);
    a.recycle();



            TypedArray其实就是一个存放资源的Array,首先从上下文中获取到R.styleable.RadioButton这个属性资源的资源数组。attrs是构造函数传进来,应该就是对应attrs.xml文件。a.getString(R.styleable.RadioButton_value);这句代码就是获取attrs.xml中定义的属性,并将这个属性的值传给本控件的mValue.最后,返回一个绑定结束的信号给资源:a.recycle();绑定结束。



              5、在xml中对控件赋初始值。

             请看第2点,绑定结束后可以在需要赋初始值的地方赋值。

<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fsms=http://schemas.android.com/apk/res/com.***.***>

            <com.***.***.RadioButton android:id="@id/isPayDepositTrue" fsms:value="true"
       android:layout_width="wrap_content" android:layout_height="wrap_content"
       android:text="@string/yes" android:textSize="18sp">
      </com.***.***.RadioButton>

</ScrollView>

             红色部分首先声明命名空间。命名空间为fsms.路径是http://schemas.android.com/apk/res/这一部分是不变的,后面接的是R的路径:com.***.***.R。然后在自定义控件的xml描述中就可以这样使用fsms:value="true"。这样就实现了自定义控件的初始化赋值。



6、RadioGroup、RadioButton组合控件的实现

                  上面是自定义控件的实现,下面将要说的是组合控件的实现。在组合控件中,最经常用到的应该就是RadioGroup和RadioButton。RadioButton的实现已经在上面介绍了。下面要介绍RadioGroup的自定义控件和功能扩展:

                     代码如下:

public class RadioGroup extends android.widget.RadioGroup {

private String mValue;

public RadioGroup(Context context, AttributeSet attrs) {
   super(context, attrs);
}

public RadioGroup(Context context) {
   super(context);
}
// 设置子控件的值
public void setChildValue(){
   int n = this.getChildCount();
   for(int i=0;i<n;i++){
    final RadioButton radio = (RadioButton)this.getChildAt(i);
    if(radio.getValue().equals(this.mValue)){
     radio.setChecked(true);
    }else{
     radio.setChecked(false);
    }
   }
}
// 获取子类的值
public void getChildValue(){
   int n = this.getChildCount();
   for(int i=0;i<n;i++){
    RadioButton radio = (RadioButton)this.getChildAt(i);
    if(radio.isChecked()){
     this.mValue=radio.getValue();
    }
   }
}

public void setValue(String value) {
   this.mValue = value;
   setChildValue();
}

public String getValue(){
   getChildValue();
   return this.mValue;
}
}

           RadioGroup只做两件事:获取子控件(RadioButton)所选择的值;设置子控件要选择的值。

    
[3] 应用Iterator 或for-each注意:java.util.ConcurrentModificationException
    来源: 互联网  发布时间: 2014-02-18
使用Iterator 或for-each注意:java.util.ConcurrentModificationException
使用Iterator 或for-each注意:java.util.ConcurrentModificationException

 

http://www.blogjava.net/fingki/archive/2010/03/02/314268.html


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android实现动态显示或隐藏密码输入框的内容 iis7站长之家
▪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