2016-02-12 90 views
1

我有一个buttonselector必须改变colorpaddingbuttoncorner radius。我在更改color时没有问题,但我永远无法看到paddingcorner radius的任何更改。Android的按钮形状不起作用

button_color.xml

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

<item android:drawable="@color/button_disabled" android:state_enabled="false"> 
    <shape 
     android:shape="rectangle" 
     android:padding="8dp"> 
     <corners android:radius="4dp" /> 

    </shape> 
</item> 
<item android:drawable="@color/button_pressed" android:state_pressed="true"> 
    <shape 
     android:shape="rectangle" 
     android:padding="8dp"> 
     <corners android:radius="4dp" /> 

    </shape> 
</item> 
<item android:drawable="@color/button_focused" android:state_focused="true"> 
    <shape 
     android:shape="rectangle" 
     android:padding="8dp"> 
     <corners android:radius="4dp" /> 

    </shape> 
</item> 
<item android:drawable="@color/colorAccent"> 
    <shape 
     android:shape="rectangle" 
     android:padding="8dp"> 
     <corners android:radius="4dp" /> 
    </shape> 
</item> 

</selector> 

代码button的:

<LinearLayout> 

    .... 
    <Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/add_to_fav" 
    android:id="@+id/add" 
    android:background="@drawable/button_color" 
    android:textColor="@drawable/button_text_color" /> 
    </LinearLayout> 

我知道有些笨拙的方式来获得padding - 把它放到布局,但是1)它是 “无用的父母” ; 2)我不会得到corner radius

那么我做错了什么,所以我还没有shape

谢谢!

回答

2

填充,颜色和角应为内部shape

那么试试这个:

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

    <item android:state_enabled="false"> 
     <shape> 
      <padding android:left="5dp" android:top="2dp" 
        android:right="5dp" android:bottom="2dp" /> 
      <corners android:radius="4dp" /> 
      <solid android:color="@color/colorPrimary"/> 
     </shape> 
    </item> 
    <item android:state_pressed="true"> 
     <shape> 
      <padding android:left="5dp" android:top="2dp" 
        android:right="5dp" android:bottom="2dp" /> 
      <corners android:radius="4dp" /> 
      <solid android:color="@color/colorAccent"/> 
     </shape> 
    </item> 
    <item android:state_focused="true"> 
     <shape> 
      <padding android:left="5dp" android:top="2dp" 
        android:right="5dp" android:bottom="2dp" /> 
      <corners android:radius="4dp" /> 
      <solid android:color="@color/colorPrimary"/> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:left="5dp" android:top="2dp" 
        android:right="5dp" android:bottom="2dp" /> 
      <solid android:color="@color/colorPrimaryDark"/> 
      <corners android:radius="4dp" /> 
     </shape> 
    </item> 

</selector> 

这样,所有的人都将工作。

+0

确实!它改变了“角落半径”!但填充已经保持不变,所以通过'margin'来解决这个问题。非常感谢你! –

1

android:radius的值很可能只是太小而不能显示效果。为padding,另一方面的语法已被改变这样的:

<item android:drawable="@color/button_focused" android:state_focused="true"> 
    <shape 
     android:shape="rectangle"> 
     <corners android:radius="20dip" /> 
     <padding 
      android:left="8dip" 
      android:top="8dip" 
      android:right="8dip" 
      android:bottom="8dip" /> 

    </shape> 
</item> 

请注意:如documentation for Shape Drawable指出,

填充应用到包含视图元素(这填充查看内容的位置,而不是形状)。