`
yq135314
  • 浏览: 255124 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

动态更换view类的背景----StateListDrawable的应用

 
阅读更多

StateListDrawable可以根据View的不同状态,更换不同的背景

可以应用如EditText,Button等中,以Button为例 

系统中默认的按钮被按下的颜色和未点击时的颜色不一样,该种实现可以用Java代码和XML实现

以Java代码:

//……前面对Button的声明略去
okBtn.setBackgroundDrawable(addStateDrawable(this, R.drawable.btn_normal, R.drawable.btn_selected, R.drawable.btn_selected));
cancelBtn.setBackgroundDrawable(addStateDrawable(this, R.drawable.btn_normal, R.drawable.btn_selected, R.drawable.btn_selected));

//……对应主要的代码
 //当对应的View处于不同的状态时,对应的bacdground跟着变化
    private StateListDrawable addStateDrawable(Context context,  int idNormal, int idPressed, int idFocused) {
    	StateListDrawable sd = new StateListDrawable();
    	Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);
    	Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);
    	Drawable focus = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);
    	//注意该处的顺序,只要有一个状态与之相配,背景就会被换掉
    	//所以不要把大范围放在前面了,如果sd.addState(new[]{},normal)放在第一个的话,就没有什么效果了 
    	sd.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focus);
    	sd.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
    	sd.addState(new int[]{android.R.attr.state_focused}, focus);
    	sd.addState(new int[]{android.R.attr.state_pressed}, pressed);
    	sd.addState(new int[]{android.R.attr.state_enabled}, normal);
    	sd.addState(new int[]{}, normal);
    	return sd;
    }
 

xml方式实现时,可以先了解下对应xml的语法 

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android"

android:constantSize=["true" | "false"]

android:dither=["true" | "false"]

android:variablePadding=["true" | "false"] >

<item

android:drawable="@[package:]drawable/drawable_resource"

android:state_pressed=["true" | "false"]

android:state_focused=["true" | "false"]

android:state_selected=["true" | "false"]

android:state_active=["true" | "false"]

android:state_checkable=["true" | "false"]

android:state_checked=["true" | "false"]

android:state_enabled=["true" | "false"]

android:state_window_focused=["true" | "false"] />

</selector>

 

下面对应的具体实例,由于是做背景用,该xml将放于/res/drawable下面(StateList中第一个匹配当前状态的item会被使用。因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/btn_selected"/>
    <item android:state_focused="true" android:drawable="@drawable/btn_selected"/>
    <item android:state_enabled="true" android:drawable="@drawable/btn_normal"/>
    <item  android:drawable="@drawable/btn_normal" />
</selector>
    

在Button的xml中进行加载:

 <Button
            android:id="@+id/canel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/btn_cancel"
            android:layout_margin="10dip"
            android:layout_weight="1"
            android:textColor="#ffffffff"
            android:textSize="15sp"
            android:background="@drawable/button_drawable"
            />

 或在java代码中加载:

 

okBtn.setBackgroundDrawable(R.drawable.button_drawable);
效果都一样。 

 

分享到:
评论

相关推荐

    android中动态更改View背景

    在Android开发中,动态地更改View的背景是一个常见的需求,特别是在实现应用主题切换或夜间模式功能时。这个过程涉及到对Android UI组件的理解、资源管理以及编程技巧。下面将详细讲解如何在Android应用中实现动态...

    VMware-Horizon-View-HTML-Access_x64-2.2.0-1404668

    web登录虚拟桌面必备组件:VMware-Horizon-View-HTML-Access_x64-2.2.0-1404668

    JSONView-for-Chrome-master.zip

    该压缩包"JSONView-for-Chrome-master"包含的是JSONView扩展的源代码,开发者可以通过这个源码了解其工作原理,进行二次开发或者定制化需求。通常,一个Chrome扩展包含以下几个部分: 1. `manifest.json`:这是...

    使用单张图片为View设置带点击效果的背景 - Java - 下载.zip

    3. 使用Java代码动态设置View背景。 4. 对于资源的引用和加载,如通过`ContextCompat.getDrawable()`方法获取资源。 了解并掌握这些内容,可以帮助开发者更好地实现用户界面的交互效果,提升用户体验。

    android应用程序实现更换自己的背景图片

    综上所述,实现“android应用程序实现更换自己的背景图片”这一功能,需要掌握Android的资源管理、布局文件操作、动态编程、数据持久化、图片加载、自定义View、主题样式、权限管理以及屏幕适配等多个方面的知识。...

    动态背景进度条--gifProgressView

    2. 初始化帧动画:在代码中,通过AnimationDrawable类加载并启动帧动画,将其设置为某个View的背景。 3. 绘制进度条:利用Canvas和Paint对象,根据进度百分比绘制进度条的前景。这一步可以通过自定义View来完成,...

    小程序scroll-view与css左右滑动超出部分背景颜色不显示的解决方法

    或者,可以通过监听`bindscroll`事件动态调整背景颜色,以达到始终显示的效果。 在实践中,可能需要结合多种方法才能完全解决问题。在调试过程中,应逐步排除可能的因素,确保每个可能引起问题的地方都得到妥善处理...

    sublime-view-in-browser-5137b93.zip

    sublime-view-in-browser-5137b93.zip 让Sublime Text2支持浏览器中预览 http://www.imququ.com/post/view_sublime-text-2_file_in_browser.html

    Uniapp 视图容器 随机拖拽滑动 放大缩小 movable-view movable-area

    综上所述,`movable-view` 和 `movable-area` 是 UniApp 中实现动态交互界面的重要组件,它们结合 Vue 的数据绑定和事件处理能力,使得在前端构建富交互应用变得更加简单和高效。开发者可以根据项目需求,灵活调整和...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    1. **源代码**:这是实现模糊视图背景的核心部分,可能包含Java类和方法,用于处理图像并应用模糊效果。 2. **示例应用**:可能包含一个简单的Java应用,演示如何使用库来创建模糊视图背景,这对于开发者理解和学习...

    QlikView培训教程-高级应用

    ### QlikView高级应用知识点详解 #### 一、QlikView概述 - **QlikView简介**:QlikView是QlikTech公司的旗舰级商业智能(BI)软件,以其独特的内存处理技术和用户友好的界面著称。近年来,QlikView在全球范围内...

    VMware-viewclient-x86_64-5.4.0

    《VMware View Client 5.4.0 for x86_64: 深入解析与应用》 VMware View Client,是VMware公司推出的一款强大的远程桌面连接工具,专为x86_64架构的系统设计,提供高效、安全的虚拟桌面访问体验。在"VMware view...

    VMware-viewagent-direct-connection-x86_64-6.1.0-2509221

    VMware-viewagent-direct-connection-x86_64-6.1.0-2509221

    QlikView Server Editions - v11

    本文将详细介绍 QlikView Server v11 的四个主要版本及其各自的特点、功能限制及应用场景。 #### 一、QlikView Server Enterprise Edition (EE) **概述:** - **目标用户:**适用于需要支持大量用户并与企业环境...

    VMware-Horizon-View-Client 云桌面

    VMware-Horizon-View-Client 云桌面应用 最好用的云桌面

    HDFView-2.14-win_64最新版HDFView

    2. HDFView-2.14.msi:这是HDFView的安装程序,用户可以通过运行这个文件来安装HDFView-2.14-win_64版本。 3. README.txt:这是一个简单的文本文件,通常包含软件的基本信息、安装指南或使用注意事项。 总的来说,...

    Android带未读提示的view-购物车-待收货-消息提示

    在Android应用开发中,"Android带未读提示的view-购物车-待收货-消息提示"是一个常见的功能需求,特别是在电商或者社交类应用中。这个功能的主要目的是为用户提供一个直观的方式来了解他们有多少未处理的任务或消息...

    更换背景图片(Android)

    在Android开发中,更换应用背景图片是一项常见的任务,可以用于实现动态主题切换或者根据用户喜好定制界面。本教程将深入讲解如何在Android应用中实现这一功能。我们将从以下几个方面进行探讨: 1. **资源管理**:...

    VSP_更换Cache电池

    ### VSP 更换 Cache 电池的操作流程与注意事项 在IT硬件维护领域,特别是对于高端存储系统而言,定期更换缓存(Cache)电池是一项至关重要的任务。本文将基于提供的HDS设备高级操作_VSP_更换Cache电池的具体步骤...

    android-pdfview-lib-for-eclipse-master.zip

    本篇文章将深入探讨"android-pdfview-lib-for-eclipse-master.zip"这个压缩包中的内容,它包含了在Eclipse环境中集成并使用PDFView库的所有必要文件,帮助开发者轻松实现在Android应用中展示PDF文档的功能。...

Global site tag (gtag.js) - Google Analytics