百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器

suiw9 2024-10-29 16:45 77 浏览 0 评论

然后我们再去看一下这个StateListDrawable,状态选择器,他可以让我们做的界面,更漂亮一些.

比如,按钮的按下和抬起显示不同的颜色.就是用这个StateListDrawable做的.

?

可以看到这个StateListDrawable,有很多的属性可以用,然后我们做个例子去看看

?

首先我们在drawable文件夹下去,创建一个资源文件xml

?

注意这里选择的时候,这个Root element 根节点要写上,selector

?

然后我们写上名字,bg_login

然后去写这个状态选择器的代码去,可以看到上面我写了两行

这个意思是,当按下控件的时候,state_pressed = true 会显示前面的红色,

我们没有添加状态的表示正常的状态下是淡蓝色.

?

然后我们在activity_main.xml中的按钮的background,背景上写上我们刚做好的那个

状态选择器,bg_login

?
然后我们运行去看效果,可以看到正常状态是淡蓝色

然后:

点击应该变成红色,但是点击,并没有变成红色,为什么呢去看看

?

我们走到,这个bg_login.xml文件中,把原来这个

item drawable = "@android:color/holo_blue_light",放到

那个state_pressed ="true" 的下面去,我们再去试试

?

可以看到正常状态是淡蓝色

?

然后我们点击的时候,就变成红色了,至于为什么把,state_pressed放到上面就可以了,这是

android系统的一个bug.不用管.

?

或者如果,我就是不想把state_pressed = true 这一句放到上面,也行,那么我们给

正常状态,下显示的holo_blue_light ,这一行添加sate_pressed = false,这样一句,这样就可以了


?

我们再去测试一下,可以看到正常情况下显示淡蓝色

?

然后点击的时候,就变成红色了.就可以了.

?

然后我们还是把state_pressed = true放到上面,这样来做.

?

然后实际上,我们这里的,这个drawable对应的,颜色,我们除了用android:color以外,我们还可以用

#f00 这样直接写的方式.

?

然后在activity_main.xml中,我们的button按钮,的background,也是可以直接写颜色的.

?

但是我们编译的时候,可以看到,如果我们在StateListDrawable的xml中,去直接用#f00 这样的颜色常量的话,

是会报错的,可以看到报错了,那很好办.

?

我们可以在values文件夹中,的colors.xml中,我们去定义一个color,可以看到btn_color_default这个是我们自己定义的color


?

然后我们用的时候,我们就可以直接,@color/btn_color_default 这样来写了.

bg_login.xml 中,我们这样写.

?

然后我们去测试一下,可以看到没问题,正常的时候是绿色

?

然后:鼠标点击下去的时候就变成了红色.


然后,利用StateListDrawable,实际上,我们在控制,按下,抬起,动作显示不同颜色之外,我们还可以,

给这个动作,设置背景的时候,添加shape,来设置圆角.


比如我们去定义一个shape

?

命名是bg_login_default,根节点是shape

?

然后我们去写好这个shape,可以看到圆角的角度是10dp,然后

solid,填充色是红色,然后

stroke,描边是1dp的厚度,然后是绿色描边.

?

然后我们在bg_login.xml这个文件中,去引用bg_login_default,这个我们刚定义的那个shape图形,我们可以去执行去看看

?

可以看到执行的结果,正常的时候是红色,带有圆角

?

然后点击的时候,变成了没有圆角的红色

?

然后按下去的状态实际上,我们也可以去给他添加一个shape



?

我们去添加一个shape,起个名字,bg_login_pressed,然后颜色是holo_red_dark是暗红色,也就是说,按钮按下以后,变成暗红色.

?

可以看到我们这里同样也去,弄个带有圆角的,矩形的shape去,可以看到这里我们

同样,指定了角度是10dp,然后用solid,蓝色填充,然后

描边stroke是绿色,也就是我们点击以后会变成蓝色的背景,带有绿色描边,我们去看看

?

可以看到正常是亮红色带有圆角,然后

?

按下以后,就变成了暗红色,然后没有圆角..这个是怎么回事,我们去看看,我们预想的是蓝色带有绿色描边的圆角背景对吧.

?

因为我们在StateListDrawable中,上面这个地方,没有引用我们,刚做的那个圆角的,蓝色带有绿色描边的矩形背景.

我们去引用一下,然后再去执行一下看看

?

可以看到正常是红色圆角,绿色描边.

?

点击以后编程蓝色圆角,绿色描边,已经可以了对吧.

?

而且我们这个StateListDrawable我们再去看一个状态,比如

这里我们正常状态下,@color/btn_color_default 后面我们还可以给他加个

android:state_enabled = "false" 可以看到这个是,就是说,当控件状态不能用的时候

显示btn_color_default,这个颜色.

?

然后我们还可以给这个StateListDrawable,状态选择器,进行组合,

可以看到,上面state_pressed 和 state_window_focused = true

表示当按下按钮,并且按钮获得焦点的时候,显示的是@drawable/bg_login_pressed





















相关推荐

5款Syslog集中系统日志常用工具对比推荐

一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...

跨平台、多数据库支持的开源数据库管理工具——DBeaver

简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...

强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)

NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...

3 年 Java 程序员还玩不转 MongoDB,网友:失望

一、什么场景使用MongoDB?...

拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南

作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...

solidworks使用心得,纯干货!建议大家收藏

SolidWorks常见问题...

统一规约-关乎数字化的真正实现(规范统一性)

尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...

Elasticsearch节点角色配置详解(Node)

本篇文章将介绍如下内容:节点角色简介...

产前母婴用品分享 篇一:我的母婴购物清单及单品推荐

作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...

比任何人都光彩照人的假期!水润、紧致的肌肤护理程序

图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...

Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型

中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...

柔性——面向大规模定制生产的数字化实现的基本特征

大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...

创建PLC内部标准——企业前进的道路

作者:FrankBurger...

标准化编程之 ----------- 西门子LPMLV30测试总结

PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...

取消回复欢迎 发表评论: