2014-10-09 40 views
0

創建自定義切換按鈕這裏就是我想要做的事:如何與它的圖像也正確地縮放每個密度的Android

  • 創建一個切換按鈕。
  • 切換按鈕的背景顏色在打開時將爲一種顏色,在關閉時爲一種顏色。
  • 切換按鈕將具有以所有內容爲中心的圖像。
  • 切換按鈕可能有3個開啓狀態,關閉,打開,開啓,其中每個狀態都是爲了提高靈敏度,例如我可能希望 顯示在按鈕中的某些方式。
  • 我想按鈕的尺寸正好適用於mdpi,並使其適用於所有其他密度。
  • 我希望圖片在按鈕上居中放置,當然也可以使用適當的密度圖像。

什麼是最乾淨的方法來做所有這些,最少的頭痛和最兼容的設備?是否讓整個按鈕背景成爲最佳圖像?一個用於開啓狀態,另一個用於每個密度的關閉。使用按鈕並將圖像疊加到它上面會是更好的方法,並控制開/關狀態的按鈕背景顏色屬性?也許在「drawable」文件夾中創建一個XML是一個選項。

回答

0

即使是內置的雙狀態切換按鈕也需要一個onClick方法來處理點擊事件,因此我認爲在onClick方法中處理視覺切換的常規按鈕並不複雜它自己的。

由於您想要使用圖像的選項,我將使用ImageButton作爲示例。

的XML具有自定義顏色的ImageButton的:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/toggleButton" 
    android:layout_marginTop="152dp" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/state0" 
    android:onClick="onToggleClick" 
    android:background="@color/red"/> 

顏色的資產應該在一個新的XML值文件中定義(見http://developer.android.com/guide/topics/resources/more-resources.html#Color

的onclick方法來處理切換的視覺效果按鈕看起來像這樣在我建立我自己的例子:

public void onToggleClick(View view){ 
    toggleState = (toggleState+1)%3; 
    switch(toggleState){ 
     case 0: 
      toggleButton.setImageResource(R.drawable.state0); 
      toggleButton.setBackgroundColor(0xffff0000); 
      break; 
     case 1: 
      toggleButton.setImageResource(R.drawable.state1); 
      toggleButton.setBackgroundColor(0xff00ffff); 
      break; 
     case 2: 
      toggleButton.setImageResource(R.drawable.state2); 
      toggleButton.setBackgroundColor(0xffff00ff); 
      break; 
    } 
} 

請不要硬編碼的顏色爲十六進制值,使變量對他們來說,在你最後的項目中。

僅供參考十六進制顏色是0xAARRGGBB

形式

要評論:

如果您想配對的文本和在同一按鈕上的Android圖像支持XML格式。它看起來像這樣有一個圖標按鈕的左邊:

<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/button_text" 
android:drawableLeft="@drawable/button_icon" 
... /> 
source: http://developer.android.com/guide/topics/ui/controls/button.html 

但你將無法將圖像與ImageButton的類的方法進行切換。

+0

感謝cam9。 ImageButton是我正在考慮的一個選項。我唯一擔心的是我還需要在圖像上方或下方的某個位置重疊文本。我當然不想將文本刻錄到圖像中,以便我可以將文本字符串國際化。有推薦的方式來覆蓋文字嗎? FrameLayout裏? – 2014-10-10 20:23:36

+0

您也可以在按鈕上放置文字。請參閱編輯 – camlunt 2014-10-10 21:07:56

+0

您能否解釋爲什麼該方法無法切換圖像?您對使用FrameLayout覆蓋文本有什麼看法? – 2014-10-10 22:55:12

0

Android有一個非常具體的方式來處理Android手機的各種像素密度,它將爲您希望支持的每個像素密度類別提供單獨的位圖(超高,中,高)

請查看此頁面以瞭解如何使用圖像支持多個像素密度。 http://developer.android.com/training/multiscreen/screendensities.html

+0

嗨cam9。 謝謝你的回覆。我完全理解你發送的鏈接。我已經刷過了幾篇這樣的文章。我真的想要一個描述最佳方法的答案,正如我在最後一段所述。有很多方法可以做到這一切,把密度的話題放在一邊。 – 2014-10-09 01:23:12