2010-05-26 43 views
11

在xml中使用Android形状我已经定义了一个渐变,我将它用作按钮的背景。Android中的自定义按钮:当我从xml读取背景时如何获取边框/边框/框架?

这一切都很好,但没有围绕按钮的边缘。我希望它看起来类似于普通的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> 

我希望边界在XML中设置。为什么不“中风”修复它?中风似乎没有做任何事情。 我查了Android开发规范,但无法找到答案: http://developer.android.com/guide/topics/resources/drawable-resource.html

我也通过Android按钮的所有属性看,但如预期有没有这样的参数,可能因为它的建成为正常的Android按钮。顺便说一句,我也检查ImageButton属性。

有人可以帮忙吗? 我知道有另一种方法可以制作具有合适边缘的图像并使用ImageButton,但实际上应该有一种方法可以通过编程方式进行修复。

谢谢! Anna

+0

xml代码没有出现在我上面的问题中。有人可以告诉我,如果有某些标签用于获取stackoverflow框我见过人们用于输入代码? – Anna 2010-05-26 11:27:33

+0

(顺便说一句:要添加HTML到您的帖子,您必须将每行缩进4个空格,与添加代码的方式相同,如果不添加代码,则SO的文本解析器会变得混乱,并且不会显示HTML。) – 2010-05-26 11:27:35

回答

19

前段时间我有这个问题。虽然我不记得为什么我会做出每个决定,但我解决这个问题的方式是使用一个形状层列表。这可以让你将一个形状堆叠在另一个之上。例如,下面的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> 

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

编辑:您的中风可能不会出现的另一个原因是您在color =“....”位之前忘记了android:

+2

编辑:你的中风可能不会出现的另一个原因是你忘了android:在颜色=“....”位之前。而已! – Entreco 2011-08-09 10:03:34

+0

先生,您应该将其设置为正确答案 – 2012-05-06 19:06:02

3

可能迟到很多,但你必须在颜色之前添加额外的ff。

<stroke android:width="5px" color="#ff000000" />

电贺

1

使用的ImageButton

<ImageButton 
     android:layout_width="40dp" 
     android:layout_height="30dp" 
     android:src="@drawable/left_arrow" 
     android:background="@drawable/button_selector" 
     android:gravity="center"/> 

使用绘制选择器的ImageButton和定义属性

<item android:state_pressed="true" > 
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item> 

<item android:state_focused="true" > 
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item> 

<item>   
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item>  

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> 

为史蒂夫Hanley说abvoe你错过了机器人:对于颜色属性。

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

+0

它的工作原理。谢谢 :) – 2012-04-24 08:32:27

0

<item android:state_enabled="false" android:drawable="@drawable/button_disabled" /> 

<item android:state_focused="true" android:drawable="@drawable/button_highlighted"/> 
<item android:state_pressed="true" android:drawable="@drawable/button_highlighted"/> 

<item> 
    <shape> 
     <gradient android:startColor="#fdfdfd" android:endColor="#f0f0f0" android:angle="270" /> 
     <stroke android:width="1dp" android:color="#56390a" /> 
     <corners android:radius="3dp" /> 
     <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> 
    </shape> 
</item> 

添加stroke color #56390a将解决这个问题。