方形布局边框,内部边缘为圆形。

9

我尝试创建一个带有外部为方形,内部为圆形的布局边框。我了解到需要创建一个由两个形状组成的.xml可绘制定义:一个具有描边宽度和圆角半径,另一个仅具有描边宽度:

可绘制定义

round_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="4dp" android:color="#FF000000" />
    <padding android:left="7dp" android:top="7dp"
            android:right="7dp" android:bottom="7dp" />
    <corners android:radius="4dp" />
    <solid android:color="#FFC0C0C0" />
</shape> 

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" android:color="#FF000000" />
    <solid android:color="#FFC0C0C0" />
</shape> 

每个独立的边框都可以单独应用,像这样:

当它们被单独应用时,每个边框都可以作为边界线工作:

android:background="@drawable/round_border" 

但是当它们被添加到类似以下的项目列表可绘制项中时:

composite_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <layer-list>
        <item android:drawable="@drawable/round_border"/>
        <!-- <item android:drawable="@drawable/square_border"/> -->
    </layer-list>
</shape> 

并且:

android:background="@drawable/composite_border"

布局的背景完全是黑色而不仅仅是黑色边框。

有人知道如何使用图层列表完成此任务吗?

4个回答

5
Shape Drawable Doc可以看出,形状内部不能有图层列表,因此您应该像这样定义您的composite_border.xml。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/square_border"/>
    <item android:drawable="@drawable/round_border"/>
</layer-list>

请注意,我更改了您在图层列表中的项目顺序,如图层列表文档所述。
列表中的每个可绘制项按照列表顺序绘制 - 列表中的最后一个可绘制项会显示在顶部。
并且您希望它从外部呈正方形。

4
尝试这个就可以正常工作:

solid代表背景颜色

stroke代表边框

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
   <solid 
       android:color="@color/white"/>
   <stroke android:width="1dp" android:color="#ffaaaaaa" />
   <size 
       android:width="15dp"
        android:height="15dp"/>
</shape>

如果我想在边框和实线之间添加填充,怎么办? - Hilal

4
创建一个名为round_background.xml的xml文件,类似下面这样的格式:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
   <solid 
       android:color="#CCCC33"/>
   <size 
       android:width="35dp"
        android:height="35dp"/>
</shape>

在设置为背景的布局中
<LinearLayout
    android:id="@+id/layout_wellbeing"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:gravity="center"
    android:background="@drawable/rounded_corner_leuvan"
    android:orientation="horizontal" >
</LinearLayout>

2

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" 
            android:color="#FF000000"
    />
    <solid android:color="#FFC0C0C0" />
</shape>

composite_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <layer-list>
        <item android:drawable="@drawable/round_border"/>
        <!-- <item android:drawable="@drawable/square_border"/> -->
    </layer-list>
</shape>

注意评论和引号!=]


请注意评论和引号的使用!=]


谢谢 - 不过我还在寻找答案。 - jchristof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接