开发者

how to make stroke for 3 sides for a shape in android?

开发者 https://www.devze.com 2023-03-17 08:20 出处:网络
I am using a stroke to make 开发者_JAVA百科a colored border to a shape in xml layout in android .

I am using a stroke to make 开发者_JAVA百科a colored border to a shape in xml layout in android .

Can I make the stroke for only 3 edges ( left,top,bottom) the right NO ?


You can achieve this by using a layerlist and messing with the padding. You'll need 3 elements:

1: A border.xml shape, which is just a solid shape in the color of your border: border.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ff0000"/>
</shape>

2: The 'inner' shape, the shape where you want the border to appear around: inner.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00ff00"/>
</shape>

3: A layer list, which will put these 2 on top of eachother. You create the border by setting the padding on the inner shape: layerlist.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/border"/>
<item android:drawable="@drawable/inner"
    android:top="3dp" android:right="0dp" android:bottom="3dp"
    android:left="3dp" />
</layer-list>


Using @Mopper answer, you can like that too.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="#ff0000" />
        </shape>
    </item>
    <item
        android:bottom="3dp"
        android:left="3dp"
        android:right="0dp"
        android:top="3dp">
        <shape>
            <solid android:color="#00ff00" />
        </shape>
    </item>
</layer-list>


Here's my solution, which works if you want transparent or semi-transparent background colors.

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="-1dp"
            >
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <stroke
                android:color="#c45b5b5b"
                android:width="1dp"/>
            <corners
                android:bottomLeftRadius="0dp"
                android:bottomRightRadius="5dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="5dp"
                />
        </shape>
        </inset>
    </item>
    <item
        android:top="1dp"
        android:right="1dp"
        android:bottom="1dp"
        android:left="0dp">
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <solid android:color="@color/infoBox_Background"/>
            <corners
                android:bottomLeftRadius="0dp"
                android:bottomRightRadius="5dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="5dp"
                />
        </shape>
    </item>
</layer-list>


Another approach would be to use a 9-Patch png file for your background. You do this by taking a normal png file and then using a tool like this to define:

  1. The area where your content goes in the png.
  2. The area of your png that stretches as the underlying control grows in either width or height.

Once you generate the 9-patch png file, add it to your drawables (define files for various resolutions). Then just set the drawable as your control background.

android:background="@drawable/my9_patch_file_name"
0

精彩评论

暂无评论...
验证码 换一张
取 消