2013-01-18 49 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);