uni-app 安卓本地离线打包时 splash.9.png 启动页图片无法按9patch模式缩放,而是普通缩放

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app 安卓本地离线打包时 splash.9.png 启动页图片无法按9patch模式缩放,而是普通缩放

操作步骤

解压SDK离线项目Android-SDK@4.45.82353_20250106,将里面的splash.png换成附件自适应的splash.9.png,启动时发生变形

预期结果

预期结果:启动页图片能根据9patch的规则自动缩放

实际结果

实际结果:启动页图片没有按照9patch的规则自动缩放

bug描述

项目基于离线SDK项目HBuilder-Integrate-AS,在src\main\res\drawable目录,将原来的启动页图片splash.png去掉,采用splash.9.png启动页图片。

如示例图,来自插件市场的标准9patch自适应启动页演示图片。放到项目后无法按9patch规则显示,而是变成了普通拉伸。

此BUG在在最新的Android-SDK@4.28.82186_20240923版本出现,升级到最新Android-SDK@4.45.82353_20250106仍旧存在。据说云打包没有此问题,不知道离线和云打包有什么区别。

Image 1 Image 2

开发环境与版本信息

项目创建方式 PC开发环境操作系统 PC开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 手机系统 手机系统版本号 手机厂商 手机机型 页面类型 vue版本 打包方式
HBuilderX Windows 11 正式 4.28 Android Android 9.0 华为 荣耀X10 vue vue3 离线

1 回复

在uni-app进行安卓本地离线打包时,如果遇到splash.9.png启动页图片无法按9patch模式缩放的问题,通常是由于图片格式处理不当或配置不正确导致的。9patch图片(.9.png)是一种Android特有的图片格式,它允许图片在拉伸时保持部分区域不变形,特别适用于按钮背景、对话框等需要拉伸但边缘或某些部分需保持原样的场景。

首先,确保你的splash.9.png图片格式正确。你可以使用Android Studio或其他支持9patch编辑的工具来创建和验证9patch图片。在9patch图片中,图片的左上和顶部边缘会有一像素宽的黑色线条,用于定义拉伸区和内容填充区。

接下来,检查uni-app项目的配置。虽然uni-app本身对9patch图片的支持可能有限(主要用于原生组件或插件),但如果你是在自定义原生插件或通过原生代码处理启动页,以下是一个Android原生处理9patch图片的示例代码:

// 在你的Activity或Application类中设置启动页
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 使用9patchDrawable设置启动页
    Drawable splashDrawable = getResources().getDrawable(R.drawable.splash_9, null);
    View splashView = new ImageView(this);
    splashView.setImageDrawable(splashDrawable);

    // 设置全屏和布局参数
    Window window = getWindow();
    window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    window.addContentView(splashView, new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
    ));

    // 可以在这里添加延时移除启动页的逻辑
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // 移除启动页,显示主内容
            window.removeView(splashView);
            setContentView(R.layout.activity_main); // 替换为你的主布局
        }
    }, 3000); // 延时3秒
}

注意,上述代码是一个Android原生Activity的示例,用于展示如何加载和使用9patch图片作为启动页。在uni-app项目中,你可能需要将这段代码集成到你的原生插件或通过manifest.json配置原生页面来实现。

如果你是在纯uni-app环境下工作,并且没有涉及到原生代码的开发,那么可能需要检查是否有相关的uni-app插件或社区解决方案支持9patch图片的启动页功能。如果没有,考虑使用普通的PNG图片作为启动页,或者通过原生开发来实现这一需求。

回到顶部