阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1475|回复: 0

[转帖] [Android]代码实现StateListDrawable

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-2-1 11:32:13 | 显示全部楼层 |阅读模式
    用途:动态设置Button、ImageView等组件在不同状态下的背景/前景显示效果。
               扩展下的话可以前景/背景的显示效果可以使用网络图片。
    优点:灵活,减少xml的编写。


    参考:
    [AndroidOpenSource]frameworksasecorejavaandroidviewview.xml
    [AndroidOpenSource]frameworksasecore
    es
    esvaluespublic.xml
    代码如下:
    •         /** 设置Selector。 */
    •         public static StateListDrawable newSelector(Context context, int idNormal, int idPressed, int idFocused,
    •                         int idUnable) {
    •                 StateListDrawable bg = new StateListDrawable();
    •                 Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);
    •                 Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);
    •                 Drawable focused = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);
    •                 Drawable unable = idUnable == -1 ? null : context.getResources().getDrawable(idUnable);
    •                 // View.PRESSED_ENABLED_STATE_SET
    •                 bg.addState(new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled }, pressed);
    •                 // View.ENABLED_FOCUSED_STATE_SET
    •                 bg.addState(new int[] { android.R.attr.state_enabled, android.R.attr.state_focused }, focused);
    •                 // View.ENABLED_STATE_SET
    •                 bg.addState(new int[] { android.R.attr.state_enabled }, normal);
    •                 // View.FOCUSED_STATE_SET
    •                 bg.addState(new int[] { android.R.attr.state_focused }, focused);
    •                 // View.WINDOW_FOCUSED_STATE_SET
    •                 bg.addState(new int[] { android.R.attr.state_window_focused }, unable);
    •                 // View.EMPTY_STATE_SET
    •                 bg.addState(new int[] {}, normal);
    •                 return bg;
    •         }

    复制代码
    示例代码:
    •                 Button btnNormal = (Button) findViewById(R.id.btnSampleNormal);
    •                 btnNormal.setBackgroundDrawable(newSelector(this, R.drawable.btn_normal, R.drawable.btn_selected,
    •                                 R.drawable.btn_selected, R.drawable.btn_unable));
    •                 Button btnUnable = (Button) findViewById(R.id.btnSampleUnable);
    •                 btnUnable.setBackgroundDrawable(newSelector(this, R.drawable.btn_normal, R.drawable.btn_selected,
    •                                 R.drawable.btn_selected, R.drawable.btn_unable));
    •                 btnUnable.setEnabled(false);
    •                 btnUnable.setOnClickListener(this);

    复制代码
    补充内容 (2011-9-23 19:08):
    貌似没人懂得这东西的好处,唉...

    rright.gif
    rleft.gif
    td_09.gif
    td_07.gif
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表