项目中遇到一个问题,Android 8.0 系统上 APP 的 icon 显示的是默认的机器人的 icon,这是什么回事?...原来 Android 8.0(API 级别 26)引入了自适应启动器图标,可以在不同设备模型中显示各种形状。下面看下官方酷炫动态图: ? ? 图1. 自适应图标支持各种设备之间不同的掩码。...可以通过定义 2 层来控制自适应启动器图标的外观,包括背景和前景。您必须提供图标图层作为可绘图,图标轮廓周围不能有蒙版或背景阴影。 ? 图2. 自适应图标使用 2 个图层和 1 个蒙版进行定义。...在 Android 7.1(API级别25)及更早版本中,启动器图标大小为 48 x 48 dp。必须使用以下准则来调整图标图层的大小: 两层的尺寸必须为 108 x 108 dp。...比以往多一个 res/mipmap-anydpi-v26 文件,打开,有背景和前景。 ic_launcher_background.xml <?
Android 8.0 (API 26)引入了自适应图标,可以在不同的设备上显示不同形状的图标。...自适应图标原理 在自适应图标中,将原来的一个图标分成了三个图层: foreground:需要显示的主 icon background:底层背景图案 Mask:遮罩,由手机设备厂商提供 ?...通过这三个图层决定了自适应图标的外观和形状 需要注意的是,提供的图层是没有形状、阴影的 PNG 格式图象 设计规则 在 Android 7.1 (API 级别 25)及更早的版本中,app 的启动图标大小为...接下来需要在资源文件及中创建我们的自适应图标,在 Android 8.0 中自适应图标存在于 res/mipmap-anydpi/ 文件夹下,使用 元素为你的图标定义前景和背景图层...如图所示,选择完前景和背景图层后,预览界面会出现不同分辨率及不同形状的自适应图标,点击 next 选择生成的目录,一套自适应图标就生成啦。 ?
我们建议使用主题背景属性来间接引用资源,您可以在不同的模式下 (比如在 深色主题背景) 实现灵活地切换。...形状 Material 采用了形状系统 (Shape system),它是由主题背景属性 实现 了 small、medium、large 等不同的部件。...请注意,如果您想给自定义的部件设置形状外观,您应该使用 MaterialShapeDrawable 作为它的背景,因为它能够理解并能实现具体形状。 ?...平台跟库有时候定义了相同的属性,如 colorPrimary。这时候系统优先使用非平台版本的属性,它们可以被所有级别的 API 使用。为了向后兼容,它们会被完整的复制到库中。...优先使用非平台版本的属性,它们可以被所有级别的 API 使用 更多资源 为了获取可以使用的全部主题背景属性,请查阅以下信息: Android platform AppCompat Material
缺点:前期工作稍微多一些 2、健康数据 手表相对于手机来说,更贴近人体,所以手表应用的一个必备的属性就是健康属性,微信目前采集了两种健康数据,一个是步数,一个是心跳。...获取心跳需要注意的是心跳的精度,分为三个级别,根据自己的需求进行调整。 获取健康数据的时候还需要加入一些权限设置,手机和手表都需要加。 ?...的切换,对Icon的点击效果变化并不友好,背景也不能设置成为透明。...,如果是需要动态适配,就需要有一个随时能够获取表盘的形状的接口。...通过在Activity启动时,传入ContentView,就可以动态获取到当前表盘的形状。
image.png 一、背景 最近公司中的相册组件被业务方反馈了新问题,在 targetSdk=30 的 Android 10 手机上运行相册,缩略图会加载不出来,于是就开启了这次的趟坑之路。...定位问题 首先,我在相册Demo中把 targetSdk 设置到 30, 然后在 Android 10 测试机上运行,发现缩略图完美的显示了出来。...分区存储 为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储空间的分区访问权限(即分区存储)。...在搭载 Android 9(API 级别 28)或更低版本的设备上,只要其他应用具有相应的存储权限,任何应用都可以访问外部存储空间中的应用专属文件。...为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被授予了对外部存储空间的分区访问权限(即分区存储)。
包括但不限于:UI图标(如返回箭头、菜单图标、心形收藏图标等)按钮背景(Button Backgrounds)界面背景(Backgrounds)位图(Bitmaps)XML绘制的形状(Shapes)、选择器...—— 历史与优化在早期Android版本中,所有图片资源都放在 drawable 目录下。...因为XML是矢量性的,系统可以根据描述在任何密度下完美地绘制出图形,无需为不同密度提供多个版本。...)为什么不能放 mipmap?...把按钮背景放在 mipmap 里也会有类似的问题,因为系统不会帮你做任何缩放适配,你需要自己写代码去控制大小,这完全违背了Android资源适配的初衷。
不过,shape只能定义单一的形状,而实际应用中,很多地方比如按钮、Tab、ListItem等都是不同状态有不同的展示形状。...举个例子,一个按钮的背景,默认时是一个形状,按下时是一个形状,不可操作时又是另一个形状。有时候,不同状态下改变的不只是背景、图片等,文字颜色也会相应改变。...: 设置是否鼠标在上面滑动的状态,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持 接下来,看看示例代码,以下是bg_btn_selector.xml的代码,用于按钮的背景...同时,使用ListView时也有些其他需要注意的地方,总结如下: android:listSelector设置的ListItem默认背景是透明的,不管你在selector里怎么设置都无法改变它的背景。...所以,如果想改ListItem的默认背景,只能通过第二种方式,在ListItem的布局layout里设置android:background。
Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。...Flutter缺点1、假装跨平台,躲不开原生代码2、Widget的类型难以选择,糟糕的UI控件API;3、Dart 语言的生态小,精通成本比较高。...WeexWeex框架能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。...这种小程序容器技术,也带来了许多好处:1、 因为 JS 在 Service 层执行,所以 JS 里面操作的 DOM 将不会对 View 层产生影响,所以小程序不能操作 DOM 结构的,这也使得小程序的性能比传统的...在小程序的生命周期中具有相同的上下文可以为具备原生应用程序开发背景的开发人员提供熟悉的编码体验;3、Service 和 View 的分离和并行实现可以防止 JS 执行影响或减慢页面渲染,这有助于提高渲染性能
Swift的最强大功能之一就是在设计API方面给我们提供了极大的灵活性。...(at: point, sideLength: 5)) 这看起来似乎不是很大的变化,但特别是在设计用更低级别的API来创建更多更高级别的API(例如我们的draw函数)时,使用可变参数可以使这类API感觉更加轻量级和方便...但是,使用可变参数的一个缺点是,预先计算的值数组不能再作为单个参数传递。...值得庆幸的是,在这种情况下,可以通过创建一个特殊的组(group)形状(就像draw函数本身一样),在一组基础形状上进行迭代并绘制它们来轻松解决: extension Shape { static...所有这些都可以帮助我们在简单性与功能之间实现完美的平衡。
11.多用组合和少继承目录介绍01.前言思考的介绍1.1 组合优于继承思考1.2 实际中的案例1.3 思考继承的争议02.绘图应用程序案例2.1 案例的背景2.2 用继承实现多形状2.3 用组合实现多形状...为什么会有这样的争议?02.绘图应用程序案例2.1 案例的背景设计一个绘图应用程序,需要有不同形状的类,比如圆形(Circle)、矩形(Rectangle)等,并且这些形状可以有不同的颜色和边框样式。...新增一种颜色或形状只需要创建一个新的实现类,而不需要修改现有的代码。这种设计更加灵活和可扩展,遵循了“组合优于继承”的设计原则。03.不同鸟类程序案例3.1 案例的背景假设我们要设计一个关于鸟的类。...如果你不能改变一个函数的入参类型,而入参又非接口,为了支持多态,只能采用继承来实现。...还是那句话,组合并不完美,继承也不是一无是处。只要我们控制好它们的副作用、发挥它们各自的优势,在不同的场合下,恰当地选择使用继承还是组合,这才是我们所追求的境界。
在背景中,一些星星散落在周围。 发布时间轴 在发布首个Android 15开发者预览版的同时,谷歌还公布了Android 15的官方时间表。...支持关闭键盘震动 之前的Android版本是没有针对软键盘进行独立的开关的(除非特别国内个别厂商做了修改),这样就导致关震动其它都会失效。不能完全区分控制。...亮度滑块支持震动反馈 为了让系统更有触感,谷歌在Android 15的亮度滑块上增加了振动反馈。这种效果非常微妙,官方表达的是让android感觉更加完美,并创造了硬件和软件的统一感。...在Android 15中,谷歌将Android AD服务提升到扩展级别10,允许它添加最新版本的隐私沙盒。...在受支持的设备上,Android 15 将添加新的 ADPF 功能: 一种节能模式,用于提示会话,用于指明其关联的线程应该优先考虑节能而非性能,非常适合长时间运行的后台工作负载。
相反,Android系统在设计的时候就不喜欢苹果这样的封闭与强制,而是选择了自由与开放,对应用图标的形状不做任何强制要求,开发者们可以自由进行选择: ?...当然我们在这里讨论这个,有点像讨论先有鸡还是先有蛋的感觉,不过Google还是想出了一套完美的解决方案。 从Android 8.0系统开始,应用程序的图标被分为了两层:前景层和背景层。...也就是说,我们在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。需要注意的是,背景层在设计的时候只允许定义颜色和纹理,但是不能定义形状。...可以看到,这就是一个前景层盖在背景层上,然后再被圆形mask进行裁剪之后的效果。 好的,那么现在剩下的问题就是,我们如何才能对自己的应用图标在Android 8.0系统上进行适配?...在预览区域中给出了可能生成的图标形状,包括圆形、圆角矩形、方形等等。
视图View的背景就是一个Drawable对象,在视图需要进行绘制而调用draw函数时,内部的一部分实现会将调用委托给背景属性mBackground这个Drawable对象的draw函数来完成背景的绘制...你可以在构造中指定缩放的比例和缩放的中心点,注意的是所缩放的Drawable对象的level不能为0: public ScaleDrawable(Drawable drawable, int gravity...Shape是一个抽象的形状类,您可以使用如下具体的形状类: ArcShape 弧形。构造指定开始角度和增加的角度,是顺时针方向, 这里0度是在正右边。 OvalShape 椭圆形。...这样当调用对象的setLevel方法指定一个级别时则只有这个级别所在的区域的Drawable对象才会显示。 这种类的实用场景在哪里呢? 这个类相当是在特定level下只显示某个子可绘制对象。...(float x, float y) 我们还可以设置在画布内某个特殊的形状下渐变 public void setShape(int shape) 系统可支持如下的形状: RECTANGLE:
其他的比如可以获取通知的清除方式,修改通知的背景颜色,修改通知的样式可以看官方文档:Android O-通知(https://developer.android.com/preview/api-overview.html...PIP 模式时,它会回调生命周期的 onPause 方法,所以此时在 PIP 模式下比如视频播放等操作就不能够在 onPause 里面暂停,而应该在 onStop 里面,这一点和多窗口模式一样,来看看它的效果...1.3 自适应图标 为了帮助开发者更好的与设备 UI 集成,Android O 支持创建自适应图标,系统可以基于设备选择的蒙版将这些图标显示为不同形状。...系统还将实现与图标的自动交互,并在启动器、快捷方式、设置、共享对话框以及概览屏幕中使用它们: 可以通过定义两层图层(前景和背景)来指定桌面图标外观,必须提供没有形状和阴影的 PNG 格式图象作为图层...1.4 自动填充框架 Android O 还引入了自动填充框架,简化了用户在账号创建、登录和信用卡表单之类的填写工作,在用户选择自动填充框架之后,新老用户都可以使用自动填充框架,我们使用 Chrome
其他的比如可以获取通知的清除方式,修改通知的背景颜色,修改通知的样式可以看官方文档:Android O-通知(https://developer.android.com/preview/api-overview.html...PIP 模式时,它会回调生命周期的 onPause 方法,所以此时在 PIP 模式下比如视频播放等操作就不能够在 onPause 里面暂停,而应该在 onStop 里面,这一点和多窗口模式一样,来看看它的效果...1.3 自适应图标 为了帮助开发者更好的与设备 UI 集成,Android O 支持创建自适应图标,系统可以基于设备选择的蒙版将这些图标显示为不同形状。...)来指定桌面图标外观,必须提供没有形状和阴影的 PNG 格式图象作为图层: [image.gif] 在以前的 Android 版本中,图标大小定义为 48 x 48 dp,但是现在必须按照以下的规范定义图层大小...1.4 自动填充框架 Android O 还引入了自动填充框架,简化了用户在账号创建、登录和信用卡表单之类的填写工作,在用户选择自动填充框架之后,新老用户都可以使用自动填充框架,我们使用 Chrome
用法 在不同情况下有很多可绘制的类型,设置按钮的状态行为,创建可伸缩的按钮背景和创建复合可绘制图层。...这用于创建一个复杂的形状,然后可以作为布局或视图的背景附加在屏幕上。例如,可以使用可绘制的形状来更改按钮背景的形状,边框和渐变。 一个形状只是一个属性的集合,被合并来描述一个背景。...形状可以用属性来描述,如圆角,背景渐变,间距填充,背景颜色固定,描边等。 纯色 Shapes 下面是一个绘制带有边框的圆角矩形的示例: 的drawable(形状,图像等),并将它们放置在相互之间的关系中。默认情况下,图层被放置在另一个的顶部,最后一个图层被绘制在顶部。...④ ClipDrawable - 在XML中定义一个drawable,根据这个Drawable的当前级别剪切另一个drawable。最常用来实现诸如进度条之类的东西。
——狄德罗 首先网上找了一圈方案,要么是用UI切图的方式,要么是说用背景或者自带的阴影,这篇文章也说了 阴影组件化,解决安卓不统一问题 - 掘金 UI切图/制作点9图的方式: 这种方式应该是完美还原蓝湖设计图的方式...,但不是从技术角度实现 下面还有几个 1. elevation(组件属性) 优点:绘制效率高,使用自带的api不用添加多余的drawable文件,并且支持 translationZ 动画方便实现点击的动画效果...CardView(组件自带) 优点:CardView是自带阴影的是Materail设计的组件,效率高;不占位 缺点:阴影方向颜色不可控; 注意:CardView模拟的光源在屏幕中心正上方阴影显示角度会有所差异...Shape(作为背景绘制所以会占位,它的绘制原理是一层层的由深到浅的形状作为阴影) 优点:颜色方向可控制;占位 缺点:没有模糊效果阴影不自然有点生硬(较弱的阴影不太容易看出来); 注意:占位的阴影要考虑预留出阴影的空间...RectF rectF = new RectF(left, top, right, bottom); // 给画笔设置阴影的颜色,阴影的模糊度,模糊度值越大越模糊,且不能为0
因此不能完全在各个系统上面完美展示出来。如果不带背景色,那么字体颜色也面临同样的困惑。试想,如果在白色的背景上显示白色的文字,用户看到白茫茫一片,是什么感受? ?...应用一般是在开启一个工作线程在后台下载,然后在下载的过程中通过回调更新通知栏中的进度条。...这种方式的唯一缺陷是样式上不能与普通通知栏消息重合,在白色背景的通知栏上极为显眼。...Background colors 新系统提供了API设置通知栏消息的背景颜色。值得注意的是,应当谨慎使用这个API,只有当消息非常紧急,必须通知到用户的时候,才需要设置背景色。...(4) IMPORTANCE_MAX(5) 开发者只能设置IMPORTANCE_NONE(0)至IMPORTANCE_HIGH(4)级别,最高级别不能通过代码控制。
7.0 新特性—2016年(Nougat) 1.应用间共享文件 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file...2.画中画(PIP)支持 一种特殊的多窗口模式,常用于视频播放。 3.自适应启动器图标 桌面icon在不同的设备型号上显示为不同的形状。...SplashScreen相关API的引入影响在Andorid 12设备上运行的所有应用。...2.麦克风和摄像头权限开关(下拉菜单新增麦克风和摄像头权限开关) 3.activity生命周期优化 影响目标API级别为Android12的App的行为变更 1.更安全的组件导出 2.PendingIntent...9(API 级别 28)开始,逐步开始对应用使用的非 SDK 接口实施了限制。
line: 线形,可以画实线和虚线 ring: 环形,可以画环形进度条 通过shape可以在XML中绘制任何形状,下面展示了Shape所支持的参数 "http://schemas.android.com...的android:width属性设置的; size的android:height属性定义的是整个形状区域的高度; size的height必须大于stroke的width,否则,线无法显示; 线在整个形状区域中是居中显示的...举个例子,一个按钮的背景,默认时是一个形状,按下时是一个形状,不可操作时又是另一个形状。有时候,不同状态下改变的不只是背景、图片等,文字颜色也会相应改变。...同时,使用ListView时也有些其他需要注意的地方,总结如下: android:listSelector设置的ListItem默认背景是透明的,不管你在selector里怎么设置都无法改变它的背景。...所以,如果想改ListItem的默认背景,只能通过第二种方式,在ListItem的布局layout里设置android:background。