You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让布局用作背景的Drawable中五种颜色宽度均等?

解决Drawable中等宽色块显示不均的问题

你的问题出在使用固定dp值设置item偏移,且shape的size仅为Drawable的固有尺寸,当Drawable适配不同宽度的父容器时,色块宽度会被拉伸不均。以下是两种Drawable层面的解决方案:

方案一:使用线性渐变实现等宽色块(兼容性好,支持所有Android版本)

通过gradient的颜色节点百分比分配宽度,确保每个色块始终占据父容器1/5的宽度:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 等宽纯色块背景 -->
    <item>
        <shape android:shape="rectangle">
            <gradient
                android:angle="0"
                android:type="linear"
                <!-- 按20%的节点划分5个等宽色块 -->
                android:colorStop="0.0, @color/red_background_70_lighter"
                android:colorStop="0.2, @color/red_background_70_lighter"
                android:colorStop="0.2, @android:color/holo_green_light"
                android:colorStop="0.4, @android:color/holo_green_light"
                android:colorStop="0.4, @android:color/holo_orange_dark"
                android:colorStop="0.6, @android:color/holo_orange_dark"
                android:colorStop="0.6, @android:color/holo_blue_dark"
                android:colorStop="0.8, @android:color/holo_blue_dark"
                android:colorStop="0.8, @android:color/darker_gray"
                android:colorStop="1.0, @android:color/darker_gray"/>
            <size android:height="250dp"/>
        </shape>
    </item>
    <!-- 外边框 -->
    <item android:top="-2dp" android:right="-2dp" android:left="-2dp" android:bottom="-2dp">
        <shape>
            <solid android:color="@android:color/transparent"/>
            <stroke
                android:width="1dp"
                android:color="@android:color/holo_orange_light"/>
        </shape>
    </item>
</layer-list>

方案二:使用LinearLayout作为Drawable(Android 8.0+支持)

直接用线性布局的权重分配实现等宽,逻辑更直观:

首先创建边框Drawable(border_shape.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/transparent"/>
    <stroke android:width="1dp" android:color="@android:color/holo_orange_light"/>
</shape>

然后创建主Drawable:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:orientation="horizontal">

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@color/red_background_70_lighter"/>

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/holo_green_light"/>

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/holo_orange_dark"/>

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_dark"/>

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/darker_gray"/>

    <!-- 叠加边框 -->
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="-1dp"
        android:background="@drawable/border_shape"/>
</LinearLayout>

原代码问题说明

  • 固定left/right偏移值:不同屏幕宽度下,剩余空间分配不均,导致色块宽度不一致。
  • shape的size属性:仅定义Drawable的固有尺寸,当Drawable被拉伸适配父容器时,该设置不会约束色块的实际显示宽度。

内容的提问来源于stack exchange,提问作者DevPeter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:55:32