2012-12-09 67 views
8

我想知道是否可以将按钮上的图像和使用可绘制的源代码并且具有上面的文本进行组合?结合了背景图像,按钮上的背景可绘制样式

我目前使用本作中可绘制/ red_btn.xml我的按钮样式

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" > 
     <shape> 
      <solid 
       android:color="#ef4444" /> 
      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <gradient 
       android:startColor="#ef4444" 
       android:endColor="#992f2f" 
       android:angle="270" /> 
      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
</selector> 

然后我的按钮

  <Button 
       android:id="@+id/testButton" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Income" 
       android:textSize="15dip" 
       android:background="@drawable/red_btn" 
    android:textColor="#fff" 
    android:textStyle="bold" /> 

它看起来像这样

enter image description here

现在我想在这个b之上添加另一个.png图像(arrow.png) utton像这样

enter image description here

权这是可能的,如果,我该怎么办呢?

在此先感谢。 __________________________________________________________________________________________________________________________________________

编辑

以下Luksprog的意见后下面我现在有“red_btn_normal.xml”在绘制

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" > 
     <shape> 
      <solid 
       android:color="#ef4444" /> 
      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <gradient 
       android:startColor="#ef4444" 
       android:endColor="#992f2f" 
       android:angle="270" /> 
      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 

</selector> 

red_ btn_pressed.xml

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

    <item android:state_pressed="true"> 
     <shape> 
      <solid android:color="#ef4444" /> 

      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 

      <corners android:radius="3dp" /> 

      <padding 
       android:bottom="10dp" 
       android:left="10dp" 
       android:right="10dp" 
       android:top="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <bitmap 
      android:gravity="right" 
      android:src="@drawable/arrow" /> 
    </item> 


</layer-list> 

然后创建我的按钮,像这样的 “red_btn.xml”

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

    <item android:drawable="@drawable/red_btn_pressed" android:state_pressed="true"></item> 
    <item android:drawable="@drawable/red_btn_normal"></item> 

</selector> 

最后我的按钮

<Button 
       android:id="@+id/testButton" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Income" 
       android:textSize="15dip" 
       android:background="@drawable/red_btn" 

    android:textColor="#fff" 
    android:textStyle="bold" /> 

问题是,它只能显示白色箭头当我点击该按钮,它不会显示它,当它的没有按下。代码有什么问题? =)

+0

按钮有一个TextView,你可以为TextView的setCompoundDrawables。所以你可以将TextDrawableLeft/Right/Bottom/Top设置为textview。 –

回答

12

我想知道如果它可能结合在一个 按钮上的图像,并使用可绘制的来源,并有上面的文本?

是的,这是可能的。您的选择将成为:

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

    <item android:drawable="@drawable/red_btn_pressed" android:state_pressed="true"></item> 
    <item android:drawable="@drawable/red_btn_normal"></item> 

</selector> 

,其中两个可绘制两个layer-list绘项目与第一项目从您最初的选择是项目和第二个是.png形象包装成位图drawbale。例如,对于red_btn_pressed.xml你必须:

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

    <item> 
     <shape> 
      <solid android:color="#ef4444" /> 

      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 

      <corners android:radius="3dp" /> 

      <padding 
       android:bottom="10dp" 
       android:left="10dp" 
       android:right="10dp" 
       android:top="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <bitmap 
      android:gravity="right" 
      android:src="@drawable/arrow" /> 
    </item> 


</layer-list> 

red_btn_normal.xml将是:

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

    <item> 
     <shape> 
      <gradient 
       android:angle="270" 
       android:endColor="#992f2f" 
       android:startColor="#ef4444" /> 

      <stroke 
       android:width="1dp" 
       android:color="#992f2f" /> 

      <corners android:radius="3dp" /> 

      <padding 
       android:bottom="10dp" 
       android:left="10dp" 
       android:right="10dp" 
       android:top="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <bitmap android:src="@drawable/allowed" android:gravity="right"/> 
    </item> 

</layer-list> 

记住箭头图像将在文本右侧只有如果大小的Button允许它(作为其Button的背景的一部分)。如果您试图在Button的文字和该箭头图像之间施加某种定位关系,那么您需要延长Button课程并自行完成。

+0

谢谢你的帮助。虽然没有完全工作,箭头只显示当我按下按钮,尽管有代码完全按照上面的方式,我一定是做错了什么? =) – anders

+0

@anders也许我的回答并不明确,这个想法是将位图绘制在'layer-list'中。检查我编辑的答案。 – Luksprog

+0

+1对于很好的答案非常感谢 –

3

我就用简单的

<Button 
       android:id="@+id/testButton" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Income" 
       android:textSize="15dip" 
       android:background="@drawable/red_btn" 
android:drawableRight="@drawable/arrow" 
    android:textColor="#fff" 
    android:textStyle="bold" />