-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.xml
56 lines (52 loc) · 8.38 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Hugo Hermit</title>
<link>https://leejunj.github.io/</link>
<description>Recent content on Hugo Hermit</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright>
<lastBuildDate>Tue, 09 Mar 2021 13:14:40 +0800</lastBuildDate><atom:link href="https://leejunj.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>SkinManager</title>
<link>https://leejunj.github.io/posts/skinmanager/</link>
<pubDate>Tue, 09 Mar 2021 13:14:40 +0800</pubDate>
<guid>https://leejunj.github.io/posts/skinmanager/</guid>
<description>换肤组件-使用说明 1. 简述 顾名思义,换肤组件为工程提供元素变色能力,本质上是动态切换资源。
可通过静态标记或动态标记方式针对需要变色元素进行变色。
静态标记可直接在xml布局中指明需要参与变色的属性,如background\textColor\src。
动态标记支持用代码处理变色行为,提供变色行为回调,可以在回调中执行自定义逻辑。
换肤组件暂时只支持本地多套皮肤,要实现外部资源包引入只要扩展ResProvider部分即可。
2. 使用 简单说需要进行
引入换肤组件 使用前构建工具(引入皮肤包) 针对需要变色View做标记 随时进行变色 及时清理被释放的View 换肤组件由SkinManager类集中提供对外暴露功能的API,所以使用基本功能时只需要看这一个类即可。
2.0 引入工程 换肤组件已经上传JCenter,可以通过Gradle轻松引入目标项目。
//换肤模块 implementation 'com.leejunj:prism:1.0.1' 2.1 构建工具、注册皮肤包 可以在自定义Application.onCreate()中做构建工具与注册皮肤包(假设皮肤包为固定后缀_skin1)行为。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SkinManager.getInstance().build(this); SkinManager.getInstance().registerSkin(new SkinTypeSuffix(&#34;_skin1&#34;)); //可以注册多套皮肤或一套 } } 除此之外,还要对需要控制的Activity设置setFactory(),可以选择在自己项目的基类Activity中处理,也可以利用Application监听Activity创建时机来统一处理,以下假设在基类Activity中处理。
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { SkinManager.getInstance().markActivity(this); super.onCreate(savedInstanceState); } } 换肤机制的关键在于setFactory(),且这个自定义Factory又是独占的,即不可多次设置,所以如果多库需要使用setFactory()时,可以用SkinManager.onCreateView()做更细粒度的控制。
@Override protected void onCreate(Bundle savedInstanceState) { getLayoutInflater().</description>
</item>
<item>
<title>Foldable</title>
<link>https://leejunj.github.io/posts/foldable/</link>
<pubDate>Fri, 05 Mar 2021 00:24:19 +0800</pubDate>
<guid>https://leejunj.github.io/posts/foldable/</guid>
<description>Foldable手机适配 0. 前言 这篇文章主要针对折叠屏(包括内折叠和外折叠)这一分类的适配做经验分享,如果时间充裕建议完整看下这篇文章和最后附录中给出的文章,如果时间不充裕,想要找到某个具体问题的解决方案可以直接看2. 适配手段环节。
1. 概念映射 1.1 手机变革新战场 虽然手机屏幕在越做越大的风潮后看似创意枯竭,但近几年市场上杀出的几款非直板屏手机让用户看到了久违的创意,也让应用开发者们陷入了痛并快乐的复杂状态。
自2019年至今,已有三星、华为、摩托罗拉、LG等国内外厂商率先杀入特殊屏幕手机领域,而各家设计的屏幕方案又不尽相同。
1.2 纷繁的屏幕方案 观察已经投入量产的机型与曝光将于2021年量产的机型,看似类别眼花缭乱,但也能总结出几个纬度来归纳这些方案。
折叠屏 内折屏:内折屏还可再根据折叠方向分成上下折叠与左右折叠,而且有些内折屏手机还配备一个外屏,代表机型有三星Z Fold2、三星Z Flip、Moto Razr。 外折屏:外折屏在折叠后屏幕在外,代表机型有华为Mate X。 双屏:这里的双屏是指由两块尺寸相近的屏幕像展开书本的左右两面一样连接的设备,与内折屏的区别在于卷轴处不连接屏幕,代表机型有微软Surface Duo、LG G8X ThinQ。 卷轴屏:让小屏幕向展开画卷一般延伸的屏幕,网传VIVO会在2021年推出量产款。 其他:还有一些很特殊的机型,虽然也可归入以上的某种类型,但因为特性的突出决定归入其他,包括多向折叠的TCL Trifold还有双屏且能旋转的LG Wing,这些机型对于适配者而言想要充分利用硬件的特殊交互性是比较难的。 1.3 应用层面的化繁为简 可能有些开发者看到以上总结了这么多纬度会担心App的适配成本会太大,其实大可不必,因为以上很多概念到了应用层面是感知不到的,准确地说这些用户感知的特性会在应用层面被映射成别的概念。
鉴于现在的内地手机市场中已经发售的特殊屏手机主要以华为与三星这两家的折叠屏手机为主,所以接下来的内容将针对折叠屏这一领域做讲解。
1.3.1 折叠屏?大屏幕? 虽然在用户角度来看展开的折叠屏跟常见直板屏幕很不一样,但在应用层面不论是内折叠屏幕还是外折叠屏幕都是大号屏幕,跟直板屏幕的差异只是尺寸不同而已,同理,折叠后用于显示的屏幕对应用来说就是尺寸小一点的屏幕罢了。
1.3.2 折叠?切换屏幕? 折叠屏幕给用户的亮点除了超大的显示尺寸外,就是屏幕可折叠的操作方式。
虽然折叠屏还可细分成内折屏和外折屏,但到了应用层面就无感知了,即发生折叠对应用而言只是屏幕尺寸发生了变化。
华为Mate X外折叠与三星Z Fold2内折叠有一点明显的差异在于物理屏幕数量的不同,在发生折叠行为时内折设备会发生物理屏幕的显示切换,即大号的内屏会关闭,转而激活小号的外屏继续进行内容显示,而外折设备会让屏幕从完整显示变成半屏显示。但以上差异在应用层面也是无感知的,因为应用层的屏幕概念是当前设备用于显示的那个屏幕,至于这个应用显示的屏幕是不是一块物理屏幕就不关心了。
可能有的适配者想通过监听折叠角度的变化做一些特殊的效果,但截止安卓11的版本中我并未看到应用层面有API支持,仅在安卓11中Framwork层找到些API支持铰链监听,所以折叠角度变化这个概念在应用层面暂时没得映射。
2. 适配手段 折叠屏设备对适配者来说可以被看作是可随时从平板与(传统尺寸)手机状态切换的设备,相比于平板与直板手机应用来说,随时切换屏幕尺寸是适配的难点也是关键点,基于Android自身机制,即使没适配过折叠屏设备的APP也能运行在折叠屏设备上,只不过UI可能会因为过度拉伸导致不好看,下面列举几个适配手段。
2.1 富有弹性的静态UI 最简单也最可靠的方式是在页面布局的实现时多考虑屏幕变化,利用合适的布局、控件和属性值来让静态的xml布局文件可以兼容不同尺寸的屏幕,这是应用的UI适配基本功就不在这里展开了。
2.2 多套资源配置 2.2.1 资源限定符-概念 利用项目中res可通过配置限定符读取的特性,为大尺寸和小尺寸屏幕(可能不同尺寸的显示屏幕对应一个物理屏幕,比如在华为Mate X这种外折屏设备上)准备不同的资源文件,详细操作可以参阅应用资源概览中的配置限定符名称。
如通过通配符准备的多套资源均无法匹配当前设备,会因为某个资源无法取到而触发运行时崩溃。
2.2.2 资源限定符-适配实操 对于折叠屏设备可以准备如下几组资源(具体限定符视情况而定,下面是假定用500dp区分展开后的折叠屏与常规屏):</description>
</item>
</channel>
</rss>