Materail Design 进阶(十一)——MaterialButton使用

距离上次写Material组件的文章已经过去了好多年😄,最近在写Flutter又接触到了Material,已经升级了许多,这次就用新的组件来试试吧~

Button组件大家都非常熟悉了,如果画一个带圆角,边框的按钮,通常我们是画一个ShapeDrawable并把它设置到Button的android:background属性中就可以了,写写shape xml文件有时还是烦的,这里首先推荐一个三方库BackgroundLibrary可以很方便的通过属性设置的方式实现圆角,边框以及各种状态效果的Background,使用非常简单,有兴趣的同学直接参考文档即可。

MaterialButton继承AppCompatButton,在原来Button的基础上做了一些扩展,如圆角、描边、前置和后置icon(icon支持设置Size、Tint、Padding、Gravity等),还支持按压水波纹并且设置color,新增属性如下。

属性描述
app:backgroundTint背景着色
app:backgroundTintMode着色模式
app:strokeColor描边颜色
app:strokeWidth描边宽度
app:cornerRadius圆角大小
app:rippleColor按压水波纹颜色
app:icon图标icon
app:iconSize图标大小
app:iconGravity图标重心
app:iconTint图标着色
app:iconTintMode图标着色模式
app:iconPadding图标和文本之间的间距

app:backgroundTint

tint着色的使用其实是一个非常巧妙的用法,尤其是在给图片给颜色上面,这样可以多个地方共用同一个图片资源,减少包的体积。

  1. MaterialButton是不受android:background控制的,官方建议我们设置app:backgroundHint来进行背景的更改。

    1.2版本以前,MaterialButton只能通过app:backgroundTint属性设置背景色,该属性接收color state list。不能通过android:background设置自定义drawable。
    1.2版本后,官方已修复此问题。如果未设置自定义背景,则 MaterialShapeDrawable 仍将用作默认背景。也就是说,如果按钮背景是纯色,可以通过app:backgroundTint指定;如果按钮背景是渐变色,则需要自己定义drawable,然后通过android:background设置

  2. MaterialButton设置background和backgroundTint是互斥的。
    如果要使用android:background设置背景,则需要将backgroundTint设置为@empty,否则background不会生效。
    如果你想要给MaterialButton设置圆角和描边则必须用app:backgroundTint来设置背景色,用background设置将导致圆角和描边失效。

  3. 背景不能撑满存在间距问题:
    AppCompatButton如果设置了android:background会覆盖上下左右的间距,MaterialButton则不会;
    MaterialButton设置了app:backgroundHint左右是没有间距的,而上下默认有6dp边距,这是MD的设计规范,可以通过insetxxx来进行修改。AppCompatButton设置了app:backgroundHint是上下左右都有间距留了4个dp的占位。
    如果想要取消背景间距设置insetTop和insetBottom为0dp

  4. android:text为数字或者字母被加粗问题
    这个问题其实并不是MaterialButton,安卓原生的Button也会有这样的问题,解决方案:设置 android:textAppearance=?android:attr/textAppearanceLarge

  5. 去掉阴影
    MD组件默认都是自带阴影的,MaterialButton也不例外。但是有时候我们并不想要按钮有阴影,那么这时候可以指定style为
    style="@style/Widget.MaterialComponents.Button.UnelevatedButton",这样就能去掉阴影,让视图看起来扁平化。

app:icon

在使用MaterialButton之前,要给Button按钮的文字旁边设置一个Icon,我们通常是设置android:drawableLeft等给上下左右设置图标,可是这个东西有个问题,一是图标大小,颜色不能随心所欲的设置,修改起来比较麻烦,二是图标和文字之间默认有个间距,这个间距的调整也比较麻烦,但是如果用MaterialButton这些问题通通都不是问题了,只需要跟使用属性一样进行设置就可以了,虽然默认文字和图标之间也有一定的间距,但是我们可以通过设置app:iconPadding为0dp来取消,但是如果是android:drawableLeft貌似设置android:drawablePadding并不能完美的去掉他哎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg读取Assets资源文件

在Android开发中我们经常把原生资源文件放在assets目录下以供需要时读取,通过API提供的resources.assets.open(filename)/openFd(filenam)方法可以非常方便获得InputStream或FileDescriptor(文件标识符),但是在使用FFmpeg读取Asse…

JavaScript系列——同步与异步

文章目录 概要同步代码:异步代码 JavaScript运行机制运行时概念栈(stack)堆队列消息的添加 异步场景网络请求 异步编程优化小结 概要 异步,按照字面理解,指的是两个或者两个以上的对象或事件不同时存在或者发生&#…

透明OLED屏的稳定性:从技术角度及应用案例解析

在显示技术日新月异的今天,透明OLED屏以其独特的透明特性和出色的显示效果,吸引了众多关注。然而,对于这种新型技术的稳定性,人们难免会有所疑虑。作为一名专注于OLED技术研发的工程师,尼伽小编将从专业角度出发&#…

十种编程语言的对比分析

在当今的软件开发领域,编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景,选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析,帮助读者了解它们的优缺点和适用场景。 一、Python Pyt…

云化XR技术于农业领域中的表现

随着科技的不断发展和应用的深入,农业领域也在逐渐引入新技术来优化生产效率和成本、改进管理和监控等。云化XR(CloudXR)作为一种融合了云计算、虚拟现实(VR)和增强现实(AR)等技术的解决方案&am…

生信技能33 - gnomAD数据库hg19/hg38 VCF文件批量下载脚本

gnomAD数据库下载地址 gnomAD downloads gnomAD v2.1.1数据集包含来自125,748个外显子组和15,708个全基因组的数据,所有这些数据都映射到GRCh 37/hg 19和GRCh 38/hg 38 两个版本的参考序列。 gnomAD数据库hg19与hg39 VCF文件批量下载脚本 download.sh # 获取当前目录路径…

C++-异常处理

1、概念 异常时程序在执行期间产生的问题。C异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。 异常提供了一种转移程序控制权的方式。 一旦程序出现异常没有经过处理,就会造成程序运行崩溃。 处理异常的方式有:抛出异常(…

Python基础(十九、文件操作写入与追加)

文章目录 一、文件的写入(使用 "w" 模式)二、文件的追加(使用 "a" 模式)三、文件备份案例接之前的答案 在 Python 中,open() 是一个内置函数,用于打开文件并返回文件对象。它是处理文件…

助力实体店数字化升级,VR智慧门店打造线上逛店体验

近年来,传统实体店业绩增长过于缓慢,实体门店的销售疲态十分明显,甚至于部分城市已经出现大量线下实体店开始关门的现象,因此顺应实体零售数字化升级趋势已经刻不容缓。越来越多的实体门店开始意识到这个问题,并逐步开…

cad快速看图软件免费版(手机在线cad快速看图)

cad快速看图软件免费版(手机在线cad快速看图) 很多机械设计师日常工作过程中涉及到多种格式的cad图纸,cad图纸大多都需要cad设计软件才能打开,然而很多小伙伴并没有下载相应的cad设计软件,这种情况下如何进行cad快速看图呢? 今天…

一文弄懂vue中样式穿透v-deep

1. 前言 在vue3的世界里,有一个style标签的关键字v-deep,官网称之为样式穿透。那他究竟是什么原理呢?又是怎么工作的呢?让我们一起探究一下。 2. 准备工作 需要实现搭建一个vue3的环境,我这里使用的是vitevue3的架构…

使用JavaScript制作一个简单的天气应用

随着Web开发技术的不断发展,JavaScript已经成为前端开发中不可或缺的一部分。它不仅可以用于创建动态和交互式的用户界面,还可以用于处理各种复杂的任务,如数据验证、动态内容更新、实时通信等。以下是一个使用JavaScript来创建一个简单天气应…

【OJ】单链表刷题

力扣刷题 1. 反转链表(206)1.1 题目描述1.2 题目分析1.2.1 头插法1.2.2 箭头反转 1.3 题目代码1.3.1 头插入1.3.2 箭头反转 2.合并两个有序链表(21)2.1 题目描述2.2 题目分析2.3 题目代码 1. 反转链表(206)…

视频转音频软件哪个好? 11 个高效的视频转音频转换器分享

网络上拥有数百个值得观看和聆听的音乐视频。但要聆听喜爱的音乐,用户必须观看整个视频,即使只有音乐让他们兴奋。那么,如何从视频中提取音频呢?简单的答案是使用视频到音频转换器将视频转换为音频格式并将其保存在您的设备上以供…

gflags.exe 工具入门详解

gflags.exe 是 Windows 平台上的一个调试工具,它来自 Microsoft Debugging Tools for Windows 工具集。gflags(全局标志)主要用于设置和管理针对特定进程或系统的调试选项以及性能监视特性。这个工具可以帮助开发者对程序进行更深入的故障排查…

【读书】《白帽子讲web安全》个人笔记Ⅰ-1

目录 前言: 第1章 我的安全世界观 1.1 Web安全简史 1.1.1中国黑客简史 1.1.2黑客技术的发展历程 1.1.3web安全的兴起 1.2黑帽子,白帽子 1.3返璞归真,揭秘安全的本质 1.4破除迷信,没有银弹 1.5安全三要素 1.6如何实施安…

使用pymysql框架连接和查询MySQL数据库

使用pymysql框架连接和查询MySQL数据库步骤: 前提:安装并import pymysql模块 1、使用 pymysql.connect()函数创建一个数据库连接对象 2、正确填写数据库配置信息,地址、端口、用户名、密码、数据库名称 3、创建游标…

微服务-sentinel-基本案例,持久化

sentinel 功能 限流 限流文档 直接拒绝:触发阀值直接抛弃。冷启动:在一段时间内针对突发流量缓慢增长处理数量。 3)匀速器:请求以均匀的速度通过。 降级降级文档 1)RT 统计时间内,大于预设请求数量&…

MySQL数据库的查询操作

MySQL单表查询 字段解析字段名字段类型雇员编号idint雇员姓名namevarchar(30)雇员性别sexenum雇用时期hire_datedate雇员职位postvarchar(50)职位描述job_descriptionvarchar(100)雇员薪水salarydouble(15,2)办公室officeint部门编号dep_idint #创表 CREATE TABLE company.em…

架构(1)

目录 1.如何理解架构的演进? 2.如何理解架构的服务化趋势? 3.架构中有哪些技术点? 4.谈谈架构中的缓存应用? 5.在开发中缓存具体如何实现? 1.如何理解架构的演进? 初始阶段的网站架构应用服务和数据服…