uni-app uni.showModal背景颜色不可控

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

uni-app uni.showModal背景颜色不可控

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 win11
HBuilderX类型 正式
HBuilderX版本 3.99
手机系统 Android
手机系统版本 Android 14
手机厂商 小米
手机机型 红米K60
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.showModal({  
    content: '确定要退出登录吗?',  
    success: e => {  
        if (e.confirm) {  
            uni.reLaunch({  
                url: '/pages/login/index'  
            });  
        }  
    }  
});

操作步骤:

uni.showModal({  
    content: '确定要退出登录吗?',  
    success: e => {  
        if (e.confirm) {  
            uni.reLaunch({  
                url: '/pages/login/index'  
            });  
        }  
    }  
});

预期结果:

背景是白色

实际结果:

不稳定,有的手机背景是白色,有的是粉黄色

bug描述:

同一个应用,两台红米K60手机,uni.showModal弹窗背景色不同,如下图所示


4 回复

这个应该是Android的动态颜色(从壁纸提取主题色),你试试换壁纸如果这个背景色也跟着变的话就不用管了


看这个demo更形象点,点击左下角切换颜色或壁纸,主题色也跟着变化

这不是uniapp干的,是各个厂商平台默认的模态弹窗样式。包括ios的也是一样 如果想都完全一样,可以自定义组件

在 uni-app 中,uni.showModal 是一个常用的 API,用于显示模态对话框。不过,uni.showModal 的背景颜色是由系统或平台控制的,开发者无法直接通过 API 参数来修改其背景颜色。这是因为不同平台(如 iOS、Android、微信小程序等)对模态对话框的样式有不同的默认设置。

如果你需要自定义模态对话框的背景颜色,可以考虑以下几种替代方案:


1. 使用自定义组件

你可以自己开发一个自定义的模态对话框组件,通过 uni-popup 或其他 UI 框架(如 uView)来实现。这样可以完全控制对话框的样式,包括背景颜色。

示例代码:

<template>
  <view>
    <button @click="showCustomModal">显示自定义模态框</button>
    <custom-modal v-if="showModal" @close="closeModal" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      showModal: false,
    };
  },
  methods: {
    showCustomModal() {
      this.showModal = true;
    },
    closeModal() {
      this.showModal = false;
    },
  },
};
</script>

自定义组件 custom-modal.vue

<template>
  <view class="modal-overlay" @click="closeModal">
    <view class="modal-content">
      <text>这是自定义模态框</text>
      <button @click="closeModal">关闭</button>
    </view>
  </view>
</template>

<script>
export default {
  methods: {
    closeModal() {
      this.$emit('close');
    },
  },
};
</script>

<style>
.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.5); /* 自定义背景颜色 */
  display: flex;
  justify-content: center;
  align-items: center;
}

.modal-content {
  background-color: white;
  padding: 20px;
  border-radius: 10px;
  width: 80%;
  max-width: 300px;
}
</style>

2. 使用 uni-popup 插件

uni-popup 是 uni-app 官方提供的一个弹出层组件,支持自定义内容和样式。

安装:

npm install [@dcloudio](/user/dcloudio)/uni-ui

使用示例:

<template>
  <view>
    <button @click="showPopup">显示弹出层</button>
    <uni-popup ref="popup" type="center" background-color="rgba(0,0,0,0.5)">
      <view class="popup-content">
        <text>这是自定义弹出层</text>
        <button @click="closePopup">关闭</button>
      </view>
    </uni-popup>
  </view>
</template>

<script>
import uniPopup from '[@dcloudio](/user/dcloudio)/uni-ui/lib/uni-popup/uni-popup.vue';

export default {
  components: { uniPopup },
  methods: {
    showPopup() {
      this.$refs.popup.open();
    },
    closePopup() {
      this.$refs.popup.close();
    },
  },
};
</script>

<style>
.popup-content {
  background-color: white;
  padding: 20px;
  border-radius: 10px;
  width: 80%;
  max-width: 300px;
}
</style>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!