【问题标题】:Adding a color background and border radius to a Layout向布局添加颜色背景和边框半径
【发布时间】:2013-03-09 21:23:25
【问题描述】:

我想创建一个带有圆角和填充色背景的布局。

这是我的布局:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="210dp"
    android:orientation="vertical"
    android:layout_marginBottom="10dp"        
    android:background="@drawable/offerItemLayout">
    <LinearLayout
        android:id="@+id/offerImageHolder"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
            .
            .
            .
    </LinearLayout>
</LinearLayout>

我有以下正确创建边框的可绘制 xml (offerItemLayout):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
               android:shape="rectangle">
            <corners
                android:radius="5dp"/>
            <stroke
                android:width="1dp"
                android:color="@color/bggrey" />            
        </shape>
    </item>
    // The lines below causes an inflation failure.
    <item>
        <fill
            android:color="@color/white"/>
    </item>
</layer-list>

但是插入带有填充的项目会导致布局的膨胀失败。

此外,如果我为我的内部 LinearLayout (offerImageHolder) 分配一个颜色背景,它会用我的圆角覆盖第一个背景。

对正确执行此操作有任何想法吗? :/

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    您不需要单独的填充项。事实上,它是无效的。您只需将solid 块添加到shape。随后的stroke 绘制在solid 之上:

    <shape 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:shape="rectangle">
    
        <corners android:radius="5dp" />
        <solid android:color="@android:color/white" />
        <stroke
            android:width="1dip"
            android:color="@color/bggrey" />
    </shape>
    

    如果您只有一个shape,您也不需要layer-list

    【讨论】:

    • 如果我想要的边框只在底部怎么办?
    • @SiKni8 可行,但这是一个不同的问题,我不能在这里发布。如果您提出新问题并提醒我,我会发布答案。
    【解决方案2】:

    可绘制文件夹中的background.xml。

    <?xml version="1.0" encoding="UTF-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <solid android:color="#FFFFFF"/>    
        <stroke
            android:width="3dp"
            android:color="#0FECFF" />
    
        //specify gradient
        <gradient
            android:startColor="#ffffffff" 
            android:endColor="#110000FF" 
            android:angle="90"/> 
    
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp"/> 
        <corners
            android:bottomRightRadius="7dp"
            android:bottomLeftRadius="7dp" 
            android:topLeftRadius="7dp"
            android:topRightRadius="7dp"/> 
    </shape>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="210dp"
        android:orientation="vertical"
        android:layout_marginBottom="10dp"        
        android:background="@drawable/background">
    

    【讨论】: