告别适配烦恼:AndroidAutoSize自定义策略实现多场景屏幕适配

告别适配烦恼:AndroidAutoSize自定义策略实现多场景屏幕适配

【免费下载链接】AndroidAutoSize 🔥 A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). 【免费下载链接】AndroidAutoSize 项目地址: https://gitcode.com/gh_mirrors/an/AndroidAutoSize

你是否还在为不同Android设备的屏幕尺寸适配而头疼?同一布局在手机上显示正常,到了平板上却面目全非?本文将带你深入了解AndroidAutoSize的高级功能,通过自定义适配策略,轻松解决复杂场景下的屏幕适配问题,让你的应用在任何设备上都能完美展示。

适配策略基础架构

AndroidAutoSize的核心优势在于其灵活的适配策略架构,通过策略接口和实现类的分离,让开发者可以根据需求定制适配逻辑。

策略接口定义

适配策略的核心接口是AutoAdaptStrategy,定义在autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java中:

public interface AutoAdaptStrategy {
    /**
     * 开始执行屏幕适配逻辑
     *
     * @param target   需要屏幕适配的对象 (可能是 {@link Activity} 或者 Fragment)
     * @param activity 需要拿到当前的 {@link Activity} 才能修改 {@link DisplayMetrics#density}
     */
    void applyAdapt(Object target, Activity activity);
}

该接口定义了适配策略的执行方法,接收两个参数:需要适配的目标对象(Activity或Fragment)和当前的Activity实例。

默认策略实现

框架提供了默认的适配策略实现DefaultAutoAdaptStrategy,位于autosize/src/main/java/me/jessyan/autosize/DefaultAutoAdaptStrategy.java。该策略实现了基本的适配逻辑:

  1. 检查是否开启外部三方库适配模式
  2. 检查目标对象是否实现CancelAdapt接口(放弃适配)
  3. 检查目标对象是否实现CustomAdapt接口(自定义适配参数)
  4. 应用相应的适配逻辑

策略包装器

WrapperAutoAdaptStrategy是策略的包装类,位于autosize/src/main/java/me/jessyan/autosize/WrapperAutoAdaptStrategy.java,提供了适配前后的回调机制:

@Override
public void applyAdapt(Object target, Activity activity) {
    onAdaptListener onAdaptListener = AutoSizeConfig.getInstance().getOnAdaptListener();
    if (onAdaptListener != null){
        onAdaptListener.onAdaptBefore(target, activity);
    }
    if (mAutoAdaptStrategy != null) {
        mAutoAdaptStrategy.applyAdapt(target, activity);
    }
    if (onAdaptListener != null){
        onAdaptListener.onAdaptAfter(target, activity);
    }
}

自定义适配策略实现

当默认策略无法满足需求时,我们可以通过实现AutoAdaptStrategy接口来创建自定义适配策略。

自定义策略步骤

  1. 创建实现AutoAdaptStrategy接口的类
  2. 实现applyAdapt方法,编写自定义适配逻辑
  3. 通过AutoSizeConfig设置自定义策略

场景示例:多设计图适配策略

假设我们的应用需要为不同模块使用不同的设计图尺寸,例如:

  • 主模块:360x640 dp
  • 个人中心模块:414x896 dp
  • 设置模块:375x667 dp

我们可以创建一个MultiDesignAdaptStrategy来实现这一需求:

public class MultiDesignAdaptStrategy implements AutoAdaptStrategy {
    @Override
    public void applyAdapt(Object target, Activity activity) {
        // 根据不同模块设置不同设计图尺寸
        if (target instanceof MainModuleActivity) {
            // 主模块使用360x640设计图
            AutoSize.autoConvertDensity(activity, 360, true);
        } else if (target instanceof UserCenterActivity) {
            // 个人中心使用414x896设计图
            AutoSize.autoConvertDensity(activity, 414, true);
        } else if (target instanceof SettingsActivity) {
            // 设置模块使用375x667设计图
            AutoSize.autoConvertDensity(activity, 375, true);
        } else if (target instanceof CustomAdapt) {
            // 支持自定义适配接口
            AutoSize.autoConvertDensityOfCustomAdapt(activity, (CustomAdapt) target);
        } else {
            // 默认使用全局配置
            AutoSize.autoConvertDensityOfGlobal(activity);
        }
    }
}

应用自定义策略

创建自定义策略后,需要通过AutoSizeConfig来应用:

// 在Application中初始化时设置
AutoSizeConfig.getInstance()
    .setAutoAdaptStrategy(new MultiDesignAdaptStrategy());
    
// 或者在运行时动态切换
AutoSizeConfig.getInstance()
    .setAutoAdaptStrategy(new AnotherCustomAdaptStrategy());

策略应用与扩展

AndroidAutoSize提供了多种方式来应用和扩展适配策略,满足不同场景需求。

适配监听器

通过设置适配监听器,我们可以在适配前后执行额外逻辑,如日志记录、性能监控等:

AutoSizeConfig.getInstance().setOnAdaptListener(new onAdaptListener() {
    @Override
    public void onAdaptBefore(Object target, Activity activity) {
        // 适配前回调
        Log.d("AutoSize", "开始适配: " + target.getClass().getSimpleName());
    }
    
    @Override
    public void onAdaptAfter(Object target, Activity activity) {
        // 适配后回调
        Log.d("AutoSize", "完成适配: " + target.getClass().getSimpleName());
    }
});

页面级适配自定义

除了全局策略外,AndroidAutoSize还支持在单个页面上自定义适配参数。只需让Activity或Fragment实现CustomAdapt接口:

public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {
    /**
     * 是否按照宽度进行等比例适配
     * @return {@code true} 为按照宽度适配, {@code false} 为按照高度适配
     */
    @Override
    public boolean isBaseOnWidth() {
        return false;
    }
    
    /**
     * 返回设计图上的设计尺寸, 单位 dp
     * @return 设计图尺寸
     */
    @Override
    public float getSizeInDp() {
        return 667; // iPhone设计图高度
    }
}

上述示例来自demo/src/main/java/me/jessyan/autosize/demo/CustomAdaptActivity.java,展示了如何让单个页面使用不同的适配基准和设计图尺寸。

适配效果展示

AndroidAutoSize在不同设备上的适配效果如下所示:

Pixel 2 XL (1440x2880)

Pixel 2 XL适配效果

Nexus 5X (1080x1920)

Nexus 5X适配效果

Nexus S (480x800)

Nexus S适配效果

策略模式最佳实践

策略组合使用

通过WrapperAutoAdaptStrategy,我们可以组合多个策略,实现更灵活的适配逻辑:

// 创建策略链
AutoAdaptStrategy strategy = new WrapperAutoAdaptStrategy(
    new MultiDesignAdaptStrategy()
);

// 设置到配置中
AutoSizeConfig.getInstance().setAutoAdaptStrategy(strategy);

动态策略切换

根据应用状态动态切换不同的适配策略:

// 根据日夜模式切换不同策略
if (isNightMode()) {
    AutoSizeConfig.getInstance()
        .setAutoAdaptStrategy(new NightModeAdaptStrategy());
} else {
    AutoSizeConfig.getInstance()
        .setAutoAdaptStrategy(new DayModeAdaptStrategy());
}

策略调试与预览

AndroidAutoSize提供了多种单位支持和预览功能,帮助开发者在开发阶段就能看到适配效果。

单位选择

支持多种单位进行布局设计:

  • DP:默认单位,需转换设计图像素为DP
  • PT:点,1pt = 1/72英寸
  • IN:英寸,1英寸 = 2.54厘米
  • MM:毫米

PT单位预览 IN单位预览

预览设置

为了在开发阶段准确预览布局效果,可以创建自定义模拟设备:

创建模拟设备步骤

总结与扩展

通过自定义适配策略,AndroidAutoSize能够满足各种复杂的屏幕适配需求。无论是多设计图适配、模块差异化适配还是特殊场景适配,都可以通过实现AutoAdaptStrategy接口来轻松实现。

框架源码和更多示例可以参考以下资源:

掌握自定义适配策略后,你可以告别繁琐的屏幕适配工作,让应用在任何设备上都能呈现最佳效果。

如果觉得AndroidAutoSize对你有帮助,请给项目点个Star支持一下!

【免费下载链接】AndroidAutoSize 🔥 A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). 【免费下载链接】AndroidAutoSize 项目地址: https://gitcode.com/gh_mirrors/an/AndroidAutoSize

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值