基础部份     StateListDrawable

安卓开发中,如果要做一个按扭按下改变背景,或获取焦点改变背景,最简单的方法是利用将背景指向一个资源,然后果在资源中配置事件,总共分为三步,

1) 创建一个布局文件,例如 内容如下:

     

<Button
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:background= "@drawable/selector_button"
android:text= "Button"  

2)编写xml 文件

创建一个drawable文件,例如 ​selector_button.xml​,内容如下:(红色部份指定一个图片资源文件)这儿指定了三种状态,

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/button_focused" />
<item android:drawable="@drawable/button_normal" />
</selector>

附,drawable 文件示例:这个文件是上面红包部份的指定文件用,这只是示例,说明这是一个样式文件,或图片资源

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0000" />
</shape>

通过 ​android:background​属性将资源对应到Button上。通过这种方式,当Button处于不同状态时,会根据定义的规则选择正确的背景图像进行显示。你可以根据自己的需求,定义不同状态下的图片或背景,并在布局文件中使用来实现不同状态下的图像切换效果。这种资源指定叫  StateListDrawable

其它使用的属性包括如下:

在StateListDrawable中,我们可以在每个 ​<item>​标签中配置以下属性:
​​android:drawable​:必须属性,用于指定当前控件在该状态下显示的Drawable资源。
​​android:state_pressed​:布尔值,表示用户点击或触摸控件时的状态。默认为false。
​​android:state_focused​:布尔值,表示当前控件获得焦点时的状态。默认为false。
​​android:state_hovered​:布尔值,表示光标移到当前控件上方时的状态。默认为false。
​​android:state_selected​:布尔值,表示当前控件被选择的状态,如在下拉列表中使用方向键选择一项。默认为false。
​​android:state_checkable​:布尔值,表示当前控件可被勾选的状态,仅在控件具有可勾选和不可勾选状态之间切换时有效。
​​android:state_checked​:布尔值,表示当前控件处于被勾选(checked)的状态。
​​android:state_enabled​:布尔值,表示当前控件处于可用的状态,即可以被点击。默认为true。
​​android:state_activated​:布尔值,表示当前控件被激活的状态。
​​android:state_window_focused​:布尔值,表示当前控件所在的应用窗口获得焦点的状态。
通过在 ​<item>​标签中配置这些属性,我们可以定义不同状态下控件要显示的Drawable资源,以实现状态切换时的样式变化。

示例一

其中<item android:drawable="@android:color/holo_blue_light"/> 要写在下面一行,如果不这样写那么要在这一行,

加上加一个属性 android:state_pressed="false"/>    完整 Drawable文件 selector 内容如下“

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/holo_blue_light" android:state_pressed="false" /> //参考代码
<item android:drawable="@android:color/holo_red_dark" android:state_pressed="true" />
<item android:drawable="@android:color/holo_blue_light" />   //这句要在下面,如果不这样,需要加上android:state_pressed="false" ,参与上面红色代码部份
</selector>
对于item项  可以不指定文件,直接给颜色值 <item android:drawable="@color/btn_color_default" />   但是这要用用文件的值,不能直接给值,安卓规范
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/bg_login"
android:text="登录" /> </LinearLayout>

自定义样式文件可以如下,文件名 引用在资源文件,

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="10dp" />
<solid android:color="#00f" />
<stroke
android:width="1dp"
android:color="#0f0" />
</shape>

安卓开发 StateListDrawable 应用的更多相关文章

  1. 基于eclipse-java的平台上搭建安卓开发环境

    首先感谢好人的分享!http://www.mamicode.com/info-detail-516839.html 系统:windows 7 若想直接安装eclipse—android的,请启动如下传 ...

  2. 关于安卓开发当中通过java自带的HttpURLConnection访问XML的java.io.EOFException问题

    刚接触安卓开发,试着写个小程序熟悉下,就写了天气预报的小程序,通过httpUrlConnection读流的方式来获取网络公共接口提供的天气XML信息.但在建立http连接时一直报java.io.EOF ...

  3. Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境

    我们开发安卓大多是使用Eclipse和安卓SDK中自带的安卓模拟器.当然,Google早就推出了自己的安卓开发环境——Android studio,在不久前,Google发布了Android Stud ...

  4. 安卓开发第一步:Android Studio安装配置

    虽然本人是JAVA开发工程师平时主要开发Web App,但因为项目需求需要开发对应的移动端.一时又找不到合适的安卓开发人员,兄弟我只好被项目经理"抓来当壮丁了".俗话说好" ...

  5. monkeyrunner之安卓开发环境搭建(一)

    在学习monkeyrunner之前,让我们先搭建好eclipse安卓开发环境. 对于程序开发人员而言,eclipse并不陌生,它提供了一个非常广阔的平台来开发程序.同样也可以用它来开发android程 ...

  6. 安卓开发:效果图中标注的像素尺寸如何转换为安卓的dp尺寸?

    我们的UI基于1920x1080分辨率给的尺寸标注,但是在安卓开发中大家一般都使用dp.sp来标注界面尺寸,所以需要一个dp与sp的转换公式. 一开始参考的的这篇文章:关于Android开发中px.d ...

  7. 安卓开发30:AsyncTask的用法

    http://blog.csdn.net/initphp/article/details/10392093 安卓开发笔记系列(43)  在开发Android应用时必须遵守单线程模型的原则: Andro ...

  8. delphi XE5下安卓开发技巧

    delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...

  9. 推荐 greenrobot eventbus,简化安卓开发,提高安卓维护性,优化安卓性能

    最近在研究移动开发,广泛的阅读有关cordova,apicloud,android资料.发现安卓的开发还是很简单的.再发现greenrobot eventbus开源框架不仅可以简化安卓开发,有可以大幅 ...

  10. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

随机推荐

  1. NumPy 二项分布生成与 Seaborn 可视化技巧

    二项分布 简介 二项分布是一种离散概率分布,用于描述在固定次数的独立试验中,事件"成功"的次数的概率分布.它通常用于分析诸如抛硬币.做选择题等具有两个结果(成功或失败)的事件. 参 ...

  2. 鸿蒙极速入门(二)-开发准备和HelloWorld

    一.开发准备 本篇博客基于的系统版本:华为官方HarmonyOS版本3.1.OpenHarmony版本4.0Beta 开发语言 ArkTS语言(推荐) JS语言(支持) Java语言(已放弃支持) 从 ...

  3. MySQL配置主从同步过程记录

    今天由于工作需要,配置了一下主从同步,这里记录一下配置过程,以备查阅. 事先度娘了一番,主从同步需要保证主从服务器MySQL版本一致(我的略有差别,主服务器版本5.5.31,从服务器版本5.5.19) ...

  4. java中SimpleDateFormat解析日期格式的问题

    在日常写代码的过程中,我们经常要处理各种格式的日期,常见的日期格式有:"20240601","2024-06-01","2024-6-1". ...

  5. SpringBoot系列(六)如何使用 MockMvc 或者 RestTemplate 发请求进行单元测试

    本文主要功能: 对最简单的/hello接口,如何编写单元测试用例. 1.首先,要引入以下依赖 <dependency> <groupId>org.springframework ...

  6. DS Record

    八云蓝自动机 Ⅰ 首先我们对于操作 \(1\) 转换,我们给 \(k\) 单独再开一个点 \(a_c\),这样我们就可以把操作 \(1\) 转换成操作 \(2\) 了. 对于区间问题,我们考虑使用莫队 ...

  7. ASP.NET MVC 出现: Uncaught ReferenceError: $ is not defined

    ASP.NET MVC 出现: Uncaught ReferenceError: $ is not defined 错误 将 _Layout.cshtml 中的三行代码,移动到 <head> ...

  8. winform遍历控件的Controls.OfType<>方法

    页面TextBox控件较多时,可以使用类似的名字,方便遍历时整体的修改,可以使用Controls.OfType<TextBox>()获取所有文本框: 需要引用命名空间System.Linq ...

  9. NetCore Benchmark 基准测试

    基于NetCore的基准测试Demo(控制台程序) 创建控制台程序,输入工程名称    LinqConsole 通过NuGet引用BenchmarkDotNet至工程中 编写测试代码  类:Bench ...

  10. SVG <pattern> 标签的用法和应用场景

    通过使用 <pattern> 标签,可以在 SVG 图像内部定义可重复使用的任意图案.这些图案可以通过 fill 属性或 stroke 属性进行引用. 使用场景 例如我们要在 <sv ...