uni-app android折叠屏国际化功能问题:切换APP语言后,uni.showModal弹窗在屏幕折叠时宽度无法自适应屏幕宽度

uni-app android折叠屏国际化功能问题:切换APP语言后,uni.showModal弹窗在屏幕折叠时宽度无法自适应屏幕宽度

操作步骤:

  1. 直接使用hbuilder创建模版项目:Hello i18n,使用自定义基座运行到折叠屏手机上,不执行语言切换,此时折叠手机或者展开手机,uni.showModal的弹窗都能自适应窗口的宽度。
  2. 切换为英文,待APP重启完成后,uni.showModal就只能显示为宽屏模式的了,此时折叠屏幕,窄屏上弹窗的宽度不变,导致无法点击到按钮(如截图所示)。
  3. 此时后台关闭App,再次启动,也无法恢复到步骤1的自适应模式了。

预期结果:

切换语言后,uni.showModal窗口能根据折叠屏屏幕变化调整宽度。

实际结果:

切换语言后,uni.showModal窗口无法根据折叠屏屏幕变化调整宽度。

bug描述:

android app端折叠屏,国际化功能,当切换了APP语言之后,uni.showModal弹窗的宽度在屏幕折叠时无法自适应屏幕宽度

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 win10
HBuilderX类型 正式
HBuilderX版本 4.15
手机系统 Android
手机系统版本 Android 14
手机厂商 小米
手机机型 Xiaomi MIX Fold 2
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX

示例图片 示例图片


更多关于uni-app android折叠屏国际化功能问题:切换APP语言后,uni.showModal弹窗在屏幕折叠时宽度无法自适应屏幕宽度的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app android折叠屏国际化功能问题:切换APP语言后,uni.showModal弹窗在屏幕折叠时宽度无法自适应屏幕宽度的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中,Android 折叠屏设备的 UI 适配问题可能会导致某些组件(如 uni.showModal 弹窗)在屏幕折叠或展开时无法正确自适应屏幕宽度。尤其是在切换应用语言后,可能会出现布局错乱或宽度不适配的情况。

以下是解决该问题的一些思路和建议:


1. 确保样式自适应

确保 uni.showModal 弹窗的样式能够根据屏幕尺寸自适应。可以通过动态计算屏幕宽度来实现:

uni.getSystemInfo({
  success(res) {
    const screenWidth = res.screenWidth;
    const modalWidth = screenWidth * 0.8; // 设置弹窗宽度为屏幕宽度的 80%
    // 使用 modalWidth 设置弹窗宽度
  }
});

2. 监听屏幕变化

折叠屏设备在展开或折叠时,屏幕尺寸会发生变化。可以通过监听屏幕变化事件来动态调整弹窗的宽度:

uni.onWindowResize((res) => {
  const screenWidth = res.size.windowWidth;
  const modalWidth = screenWidth * 0.8; // 重新计算弹窗宽度
  // 更新弹窗宽度
});

3. 使用 uni-app 的国际化功能

切换语言时,确保布局能够根据语言动态调整。可以在 onLocaleChange 事件中重新渲染页面或弹窗:

uni.onLocaleChange(() => {
  // 重新加载页面或弹窗
});

4. 自定义弹窗

如果 uni.showModal 的样式和布局无法满足需求,可以考虑使用自定义弹窗组件。通过自定义组件,可以更灵活地控制弹窗的布局和样式:

<template>
  <view class="custom-modal" :style="{ width: modalWidth + 'px' }">
    <!-- 弹窗内容 -->
  </view>
</template>

<script>
export default {
  data() {
    return {
      modalWidth: 300, // 默认宽度
    };
  },
  mounted() {
    this.calculateModalWidth();
    uni.onWindowResize(() => {
      this.calculateModalWidth();
    });
  },
  methods: {
    calculateModalWidth() {
      uni.getSystemInfo({
        success: (res) => {
          this.modalWidth = res.screenWidth * 0.8;
        },
      });
    },
  },
};
</script>

<style>
.custom-modal {
  background-color: white;
  border-radius: 10px;
  padding: 20px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
</style>
回到顶部