2012-04-10 610 views
4

按钮视图中的阴影属性为文本提供阴影。我怎么可以给阴影一个按钮的右侧和底部边框如下图所示:

enter image description hereAndroid按钮边框阴影

+0

[已在此处询问](http:// stackoverflow。com/a/6401739/420015) [And again here](http://stackoverflow.com/a/4929068/420015) – adneal 2012-04-10 07:15:40

+0

我已经使用过这种技巧,它只给文本带来阴影。 – MobiDev 2012-04-10 07:32:36

+0

你为什么不为这个创建9patch图像 – hardartcore 2013-08-09 08:48:18

回答

0

Here是一个blob后,我发现可以帮助。它只能在RelativeLayout中工作。与同样大小的按钮,创建一个视图组件,并立即将其放置在下面:

<Button 
    android:id="[email protected]\my_button" 
    android:layout_below="@id/some_layout_item" 
    android:layout_width="100dp" 
    android:layout_height="5dp" 
    > 
</Button> 
<View 
    android:layout_below="@id/my_button" 
    android:layout_width="100dp" 
    android:layout_height="5dp" 
    android:background="@drawable/drop_shadow" 
    > 
</View> 

创建阴影的绘制(drop_shadow.xml):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android=”http://schemas.android.com/apk/res/android”>  
    <gradient 
     android:startColor="@color/cream_dark" 
     android:endColor="@color/cream" 
     android:angle="270" 
     > 
    </gradient> 
</shape> 
+0

这只设置背景颜色。我不想改变背景颜色。我只想要右边和底边。 – MobiDev 2012-04-10 08:49:06

+0

我认为你可以通过玩第二个视图的尺寸和边距来达到你想要的效果。 – kgiannakakis 2012-04-10 09:20:45

+0

你想说,在按钮后面放置一个黑色视图? – MobiDev 2012-04-10 11:15:01

0

我的按钮的背景设置这样的

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <gradient 
    android:startColor="@android:color/holo_green_dark" 
    android:endColor="@android:color/holo_green_light" 
    android:angle="90"> 
    </gradient> 
    <stroke 
    android:width="1px" 
    android:color="@android:color/darker_gray" /> 
</shape> 

阴影的效果可以通过原始按钮形状下加入第二形状,改变其颜色要么黑色或灰色较暗之一来完成。但是阴影应该与按钮的形状相同。

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

    <solid android:color="@android:color/darker_gray"/> 

</shape> 

要重叠不同的项目,我们必须使用“图层列表”资源,并包括以前的形状。阴影应该出现在第一位,然后出现一些位移的原始按钮。在这个例子中,我们在按钮的底部创建阴影,偏移量为4px。

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/shadow"/> 
    <item 
    android:drawable="@drawable/button" 
    android:bottom="4px" 
    android:right="4px" 
    /> 
</layer-list> 

现在将该按钮的背景设置为layerlist drawable。这应该做到这一点。

3

尝试用选择使自己的按钮9修补图像:

btn_normal.9.pngNormal

btn_pressed.9.pngPressed

btn_focused.9 .pngFocused

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/btn_focused" /> 
    <item android:state_focused="true" android:drawable="@drawable/btn_focused" /> 
    <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" /> 
    <item android:drawable="@drawable/btn_normal" /> 
</selector> 

,并添加android:background="@drawable/btn_selector"按钮的属性。

1

你可以试试。我在我的项目中使用它。我给Button的右下边框添加阴影。

按钮XML

<Button 
     android:id="@+id/buttonSignIn" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:background="@drawable/button_dropshadow" 
     android:textColor="000000" 
     android:text="Sign In" /> 

在绘制文件添加button_dropshadow.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <layer-list> 
     <item android:left="5dp" android:top="5dp"> 
      <shape> 
       <corners android:radius="3dp" /> 
       <solid android:color="#000000" /> 
      </shape> 
     </item> 
     <item android:bottom="2dp" android:right="2dp"> 
      <shape> 
       <gradient android:angle="270" 
        android:endColor="#ffffff" android:startColor="#ffffff" /> 
       <stroke android:width="1dp" android:color="#000000" /> 
       <corners android:radius="4dp" /> 
       <padding android:bottom="10dp" android:left="10dp" 
        android:right="10dp" android:top="10dp" /> 
      </shape> 
     </item> 
    </layer-list> 
</item> 

</selector> 

谢谢。