2013-01-18 42 views
1

我使用xml文件为我的按钮着色。在xml中有一个代码来定义点击按钮时我的按钮的颜色。如何设置按钮的状态_按下

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

    <item android:state_pressed="true" > 
     <shape> 
      <gradient 
        android:startColor="@color/mainRaddoppiaButtonBackgroundEnd" 
       android:endColor="@color/mainRaddoppiaButtonBackgroundStart" 

       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@color/mainRaddoppiaButtonBackgroundStart" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 

    <item android:state_focused="true" > 
      <shape> 
      <gradient 
        android:startColor="@color/mainRaddoppiaButtonBackgroundEnd" 
       android:endColor="@color/mainRaddoppiaButtonBackgroundStart" 

       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@color/mainRaddoppiaButtonBackgroundStart" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 

    <item>   
     <shape> 
      <gradient 
       android:startColor="@color/mainRaddoppiaButtonBackgroundStart" 
       android:endColor="@color/mainRaddoppiaButtonBackgroundEnd" 
       android:angle="270" /> 
      <stroke 
       android:width="0dp" 
       android:color="@color/mainRaddoppiaButtonBackgroundStart" /> 
      <corners 
       android:radius="3dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
</selector> 

是否可能从java保持我的按钮被按下,并使用在我的xml文件中设置的“state_pressed”值进行着色?

成才,如:

public void onClick(View button) { 
    button.seLayout(R.xml.xmlFileName.state_pressed) 
} 

当然这个代码有没有意义,我只是做它让你明白我想要做

回答

3

试试这个。

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

更换和BTN_PRESSED与btn_normal要各自绘制。 –

+0

我需要用java做 – MDP

+0

button.setBackgroundResource(R.drawable.xmlimage); –

2

使用StateListDrawable如通过代码设置选择:

StateListDrawable states = new StateListDrawable(); 
states.addState(new int[] {android.R.attr.state_pressed},getResources().getDrawable(R.drawable.pressed)); 
states.addState(new int[] {android.R.attr.state_focused},getResources().getDrawable(R.drawable.focused)); 
states.addState(new int[] { },getResources().getDrawable(R.drawable.normal)); 

button.setBackgroundDrawable(states);//FOR BUTTON 
+0

mmm我这样做了: states.addState(new int [] {android.R.attr.state_pressed},getResources()。getDrawable(R.xml.XML_FILE_NAME_WHERE_I_DEFINED_THE_STATE_PRESSED));但当我点击按钮,按钮消失 – MDP

+0

好吧,对不起,我认为它能够保持我的XML文件中设置的颜色! Thanl you – MDP

+0

@MatteoDepasquali您需要将选择器文件添加到一个drawable中。例如** drawables/myselector.xml ** - >'getResources()。getDrawable(R.drawable.myselector))' –

0

使用此:

StateListDrawable states = new StateListDrawable(){ 
    @Override 
    protected boolean onStateChange(int[] stateSet) { 
     // 
    } 
}; 
itemView.setBackground(states);