2011-03-16 131 views
14

我正在使用ImageButton。但點擊時我不明白。我GOOGLE了,許多人建議使用選擇器在其他圖像顯示。有沒有辦法解決。通過只使用一個圖像並突出顯示或給它發光效果。以便用戶知道該按鈕已被點擊。Android單擊時突出顯示一個圖像按鈕

+0

你可以告訴你使用的是創建圖像按鈕的代碼? – Cristian 2011-03-16 15:27:54

回答

29

這其實並不是很難做到。你甚至不需要創建2個獨立的.png文件或類似的東西。舉例來說,如果你想擁有它有一個梯度的按鈕,然後更改它,當按下按鈕:

第1步: 創建默認按鈕梯度(繪製/ default_button.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="3dp" /> 
    <gradient android:endColor="#8ba0bb" android:startColor="#43708f" android:angle="90" /> 
    <stroke android:width="1dp" android:color="#33364252" /> 
</shape> 

步驟2:創建默認按鈕被按下梯度(可拉伸/ default_button_pressed.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="3dp" /> 
    <gradient android:endColor="#43708f" android:startColor="#8ba0bb" android:angle="90" /> 
    <stroke android:width="1dp" android:color="#33364252" /> 
</shape> 

步驟3:創建選擇器(繪製/ default_button_selector.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" android:drawable="@drawable/default_button_pressed" /> 
    <item android:drawable="@drawable/default_button" /> 
</selector> 

步驟4 (可選):爲按鈕創建風格(值/ style.xml):

<resources> 
    <style name="DefaultButton"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:background">@drawable/default_button_selector</item> 
    </style> 
</resources> 

步驟5:使用按鈕(佈局/ main.xml中):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 

    <button style="@style/DefaultButton" /> 

</RelativeLayout> 

正如你所看到的,這並不是特別困難。

+19

lol @Zack'正如你所見,做起來並不難。' – 2011-03-16 15:48:33

+2

這很好,因爲你可以使用相同的風格輕鬆添加一些按鈕。 – 2011-03-16 16:17:09

+4

如果我們需要具有不同背景圖像的按鈕,該怎麼辦? – Kishore 2012-08-21 09:25:51

2

爲了不必爲每個按鈕設置多個drawable,我在觸摸監聽器中設置了圖像按鈕的顏色過濾器屬性。

見代碼在這裏在另一篇文章:

https://stackoverflow.com/a/14278790/891479

+0

+1這個固體解決方案。 – 2013-05-04 05:55:59

18

,而無需創建多個圖像(壓,正常等),甚至不必創建選擇。使用setOnTouchListener而不是setOnClickListener。下面的代碼會給你點擊項目上的灰色覆蓋。

((ImageButton)findViewById(R.id.myImageBtn)).setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       ImageButton view = (ImageButton) v; 
       view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); 
       v.invalidate(); 
       break; 
      } 
      case MotionEvent.ACTION_UP: 

       // Your action here on button click 

      case MotionEvent.ACTION_CANCEL: { 
       ImageButton view = (ImageButton) v; 
       view.getBackground().clearColorFilter(); 
       view.invalidate(); 
       break; 
      } 
      } 
      return true; 
     } 
    }); 
+1

這對我有用。請務必清除ACTION_UP上的顏色過濾器。 – 2014-06-06 15:36:27

+0

我的ADT不知道'PorterDuff'是什麼,所以後綴'android.graphics'(android.graphics.PorterDuff.Mode.SRC_ATOP)暗示代碼完成 – 1owk3y 2014-12-01 22:48:02

+0

幫了我很多,謝謝! – 2015-06-12 08:47:37

2

我設法做到了這一點! 首先在可繪製文件夾中聲明buttonStyle.xml

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

    <item 
     android:state_focused="false" 
     android:state_pressed="true" 
     android:drawable="@drawable/button_pressed" /> 

    <item android:drawable="@drawable/button_normal" /> 
</selector> 

然後創建button_pressed.xml在繪製文件夾中。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="@color/semiTransparentGnfrBlueColor" /> 
    <stroke android:width="10dp" android:color="@android:color/transparent" /> 
</shape> 

之後,你創建button_normal.xml在繪製文件夾中。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:innerRadiusRatio="3" 
    android:shape="rectangle"> 
    <solid android:color="@color/gnfrBlueColor"/> 
    <stroke android:width="10dp" android:color="@android:color/transparent" /> 
</shape> 

您可以使用默認的顏色,但如果你想做到這一點跟我一樣,你需要有一個名爲顏色的文件。XML價值觀文件夾,這個數值內:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<item name="gnfrBlueColor" type="color">#2A3748</item> 
    <item name="semiTransparentGnfrBlueColor" type="color">#602A3748</item> 
<integer-array name="androidcolors"> 
<item>@color/gnfrBlueColor</item> 
    <item>@color/semiTransparentGnfrBlueColor</item> 
    </integer-array> 
</resources> 

最後將它設置爲您的按鈕或什麼:

savedAccountLoginButton.SetBackgroundResource(Resource.Drawable.buttonStyle); 

注意到我設置筆畫顏色透明因爲當你設置backgroundresource您的按鈕變得更大,並與此伎倆它仍然是原創。

這是我可以通過程序實現的唯一方法。

如果您想通過XML做到這一點:

<Button 
      android:text="ENTRAR" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:background="@drawable/buttonstyle" 
      android:textColor="@color/white" 
      android:textSize="18sp" 
      android:id="@+id/button1" />