Android中的自定义按钮:当我从xml读取背景时如何获取边框/边框/边框?

Ann*_*nna 11 android

在xml中使用Android Shapes我已经定义了一个渐变,我将其用作按钮的背景.

这一切都很好,但按钮周围没有边缘.我希望它看起来类似于普通的Android按钮,但我需要更多的灵活性来控制颜色和外观.

形状定义如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:startColor="#FFFFFF" 
        android:endColor="#00FF00"
        android:angle="270" />
    <corners android:radius="3dp" />
    <stroke android:width="5px" color="#000000" />
</shape>
Run Code Online (Sandbox Code Playgroud)

我希望边框可以在xml中设置.为什么不"中风"修复它?中风似乎没有做任何事情.我检查了Android Developer规范,但在那里找不到答案:http: //developer.android.com/guide/topics/resources/drawable-resource.html

我还查看了Android按钮的所有属性,但正如预期的那样,没有这样的参数,可能因为它内置于普通的Android按钮中.顺便说一句,我也检查过ImageButton属性.

有人可以帮忙吗?我知道可以使用适当的边缘制作图像并使用ImageButton,但实际上应该有一种方法可以通过编程方式修复此问题.

谢谢!安娜

Ste*_*ley 19

我刚才有这个问题.虽然我不太清楚为什么我做出了每个决定,但我解决它的方法是使用aa shape layer-list.这使您可以将一个形状堆叠在另一个上面.例如,以下XML创建一个具有2px宽实心黑色轮廓的形状,中间有一个"灰色到白色到灰色"的渐变:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <padding android:left="1dp"
                android:top="1dp"
                android:right="1dp"
                android:bottom="1dp"/>
            <solid android:color="#FF000000"/>
            <corners android:radius="3dp"/>
        </shape>
    </item>

    <item>
        <shape>
            <padding android:left="2dp"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp"/>
            <gradient android:startColor="#FFB0B0B0"
                android:centerColor="#FFFFFFFF"
                android:endColor="#FFB0B0B0"
                android:angle="315"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

如果你希望能够动态地改变颜色在运行时,事情得到了很多混乱.同样,为什么我必须以某种方式做事的细节是模糊的,但我最终必须创建一个包含自定义ShapeDrawable的自定义视图类.我开始查看SDK附带的ApiDemos应用程序中的示例 - 这是一个非常好的资源.

编辑:你的笔画可能不会出现的另一个原因是你忘记android:了color ="...."之前的位.

  • 编辑:你的笔画可能不会出现的另一个原因是你忘记了android:在color ="...."之前.而已! (2认同)

pra*_*enb 6

我遇到了同样的问题,我观察到的是笔画在设计时没有应用于按钮作为边框,但在运行时我看到了边框.

我jst使用了以下相同的代码

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <solid android:color="@color/black" />
    <stroke  android:width="1px" android:color="@color/red" />

</shape>
Run Code Online (Sandbox Code Playgroud)

正如史蒂夫·汉利所说,abvoe你错过了android: for color属性.

希望这有助于某人......