资料
Android屏幕适配
Android百分比布局库(percent-support-lib)解析与扩展
平板尺寸统计
Android多屏幕适配-平板
Android多屏幕适配-手机
尺寸
- px
像素 - inch
英寸 - pt
1/72英寸 - dpi
图像每英寸内点数,即像素密度。不同设备dpi不同(标准160dpi)效果不同,与设备硬件相关。 - dip(dp)
设备独立像素(又设备无关像素 Device Independent Pixels、密度独立性 Density Independent或设备独立像素,简称DIP或DP)是一物理测量单位,基于计算机控制的坐标系统和抽象像素(虚拟像素),由底层系统程序使用,转为物理像素的应用。标准屏(160dpi)1dp=1px。
分类
手机适配
- 一
- 二
px适配(宽高限定符适配)。 - 三
dip(dp)适配。 - 四
最小宽限定符适配。
平板(Tablet)适配
- 最小宽限定符
- layout横屏布局文件,layout-port竖屏布局文件
ScreenAdaptation
- 下载dimens.xml、screenMatch.properties。
- 据资料一种非常好用Android屏幕适配配。
AndroidAutoSize
依赖
implementation 'me.jessyan:autosize:1.1.2'
AutoSizeInitConfigure
package widget.autosize;
import android.app.Activity;
import android.app.Application;
import java.util.Locale;
import me.jessyan.autosize.AutoSize;
import me.jessyan.autosize.AutoSizeConfig;
import me.jessyan.autosize.external.ExternalAdaptManager;
import me.jessyan.autosize.internal.CustomAdapt;
import me.jessyan.autosize.onAdaptListener;
import me.jessyan.autosize.utils.LogUtils;
/**
* Created on 2019/7/18.
*
* @author 郑少鹏
* @desc AutoSize初始化配置
*/
public class AutoSizeInitConfigure {
public static void initAutoSize(Application application) {
// 应用多进程且适配所有进程需初始时调initCompatMultiProcess(Context context)
AutoSize.initCompatMultiProcess(application);
// 自定AndroidAutoSize
AutoSizeConfig.getInstance()
// 框架支持自定Fragment适配参数
// 该需求较少见,须使用者手动开启
/*.setCustomFragment(true)*/
// 屏蔽系统字体大小对AndroidAutoSize影响(默false)
// true应用字体大小不随系统字体大小变
// false应用字体大小随系统字体大小变
/*.setExcludeFontScale(true)*/
// 屏幕适配监听器
.setOnAdaptListener(new onAdaptListener() {
@Override
public void onAdaptBefore(Object target, Activity activity) {
// 以下支持Android分屏或缩放模式
// 前提分屏或缩放模式下用户改应用窗口大小系统重绘当前页
// 测试某些机型某些场景系统不重绘当前页
// ScreenUtils.getScreenSize(activity)定不要传Application
/*AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]);*/
/*AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1]);*/
LogUtils.d(String.format(Locale.ENGLISH, "%s onAdaptBefore!", target.getClass().getName()));
}
@Override
public void onAdaptAfter(Object target, Activity activity) {
LogUtils.d(String.format(Locale.ENGLISH, "%s onAdaptAfter!", target.getClass().getName()));
}
})
// 打印内部日志(默true)
// false不打印日志
/*.setLog(false)*/
// 用设备实际尺寸适配(默false)
// false以屏高为基准适配时AutoSize以屏总高减状态栏高适配
// true用设备实际屏高(不减状态栏高)
/*.setUseDeviceSize(true)*/
// 全局按宽等比例适配(默true)
// false全局按高适配
/*.setBaseOnWidth(false)*/
// 屏幕适配逻辑策略类
// 通不设(框架默认即可)
/*.setAutoAdaptStrategy(new AutoAdaptStrategy())*/;
customAdaptForExternal();
}
/**
* 给外部三方库{@link Activity}自定适配参数
* <p>
* 三方库{@link Activity}(远程依赖源码不可改)不能以实现{@link CustomAdapt}接口方式提自定适配参数。
* {@link ExternalAdaptManager}替实现接口方式提自定适配参数。
*/
private static void customAdaptForExternal() {
// ExternalAdaptManager是一管理外部三方库适配信息和状态管理类
// 详看ExternalAdaptManager注释
/*AutoSizeConfig.getInstance().getExternalAdaptManager()*/
// 添无需适配三方库(不局限于三方库)Activity即可使该Activity适配失效
// 支持链式调用ExternalAdaptManager#addCancelAdaptOfActivity(Class)#addCancelAdaptOfActivity(Class)
/*.addCancelAdaptOfActivity(DefaultErrorActivity.class)*/
// 添需提自定适配参数三方库(但不局限于三方库)Activity即可使该Activity据自身所提适配参数适配
// 默全局适配参数不满足可用此法
// 通于三方库Activity,因三方库设计图尺寸或不同项目自身设计图尺寸,完美适配三方库页需提三方库设计图尺寸及适配方向(以宽,或高为基准?)
// 三方库页设计图尺寸或无法获知,不断尝试使三方库适配效果最好
// AndroidAutoSize可使布局于所有设备都等比例缩放
// 仅于一设备测一最完美设计图尺寸后该三方库页于其它设备亦呈同样适配效果,等比例缩放,即完成三方库页屏幕适配
// 即使不改三方库源码也可完美适配三方库页(AndroidAutoSize优势)
// 前提三方库页布局用dp和sp,布局全用px时AndroidAutoSize无能为力
// 支持链式调用ExternalAdaptManager#addExternalAdaptInfoOfActivity(Class, ExternalAdaptInfo)#addExternalAdaptInfoOfActivity(Class, ExternalAdaptInfo)
/*.addExternalAdaptInfoOfActivity(DefaultErrorActivity.class, new ExternalAdaptInfo(true, 400));*/
}
}
Application
AutoSizeInitConfigure.initAutoSize(this);
AndroidManifest.xml
<manifest>
<application>
<!--项目所有页都仅需以高宽其一作基准适配仅需填高宽其一设计图尺寸-->
<!--副单位(pt、in、mm)可直像素填设计图尺寸(无需转像素为dp)-->
<meta-data
android:name="design_width_in_dp"
android:value="360" />
<meta-data
android:name="design_height_in_dp"
android:value="640" />
</application>
</manifest>
注意
- 基准600
- 手机与平板阈值600
- 推荐用12sp、14sp、18sp、22sp设字体,奇数和小数易致精度丢失。小于12sp字体用户看不清。