2013-03-31 3 views
3

이미지 버튼의 배경을 변경하고 싶습니다. 기본적으로 내가 가지고있는 이미지는 투명한 배경과 비뚤어진 배경이 모두있는 수많은 비열한면에서 멋지게 보입니다.ImageButton 배경의 한 상태 (기본 상태) 만 변경하십시오.

이 쉬워야한다 - 단지 (드로어 블을 통해) 투명한 색으로 버튼에 android:background을 변경 : 다음 click_background.xml

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

    <item android:state_focused="true"><color android:color="#FF008080" /> 
    </item> 
    <item android:state_pressed="true"><color android:color="#FF008080" /> 
    </item> 
    <item><color android:color="#00000000" /> 
    </item> 

</selector> 

버튼

<ImageButton 
       android:id="@+id/players" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:background="@drawable/click_background" 
       android:contentDescription="@string/players" 
       android:src="@drawable/speaker_tile" /> 

문제은 실제로 배경의 state_focussedstate_pressed 버전을 유지하려는 것입니다. (테마에서 파생 된 것 같습니다). 버튼을 눌렀을 때 테마가 일반적으로 사용하게 될 버튼을 누르거나 선택했을 때 배경이 나타나게하고 싶습니다 (정확하게 동일한 색상/드로어 블과 함께 나타납니다).

나는 다음 중 하나를 수행 할 수있는 방법이 있는지 궁금했지만, 지금까지 중 하나에 아무것도 찾을 수 없었습니다 : 비슷한

  1. 일부에서 무슨 일이 서로 상속 선택기 정의를 (테마가 다른 것에서 상속받을 수있는 방법).

  2. 완전히 새로운 선택기를 만들지 만 이미지 버튼에 사용 된 테마는 state_focussedstate_pressed의 색상/드로어 블을 사용합니다. 편집 :이 옵션이없는 것 같습니다. 나는 속성을 필요로했을 것이다. 그러나 drawable에서 그것들을 참조 할 수는 없다. See here

나는 가능하면 프로그래밍 자바보다는 선언적 XML에서이 작업을 수행하고 싶습니다.

답변

3

Android OS에서 사용하는 드로어 블을 프로젝트에 복사하고 상태 목록 드로어 블에서 사용할 수 있습니다. 당신은 {android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi]

편집의 이미지를 찾을 수 있습니다 : 당신이 {android-sdk-directory}/platforms/android-##/data/res/values에 가면 , 당신은 안드로이드에서 사용하는 themes.xmlstyles.xml 파일을 찾을 수 있습니다. 그것들을 사용하면 찾고있는 드로어 블을 파악할 수 있습니다. 예 : 기본 Android 테마는 Theme.Holo입니다.

<style name="Widget.Holo.ImageButton" parent="Widget.ImageButton"> 
    <item name="android:background">@android:drawable/btn_default_holo_dark</item> 
</style> 

는 다행히 배경 속성이 바로 눈에 잘 띄는 곳에 정의 : 다음과 같이 스타일이 정의되어 styles.xml에서

<item name="imageButtonStyle">@android:style/Widget.Holo.ImageButton</item>

:이 테마는과 같이 선언 ImageButtons에 대한 기본 스타일을 가지고있다. 때로는 상위 스타일에서 상속되므로 대신 해당 스타일을 찾아야합니다.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_window_focused="false" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_window_focused="false" android:state_enabled="false" 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_default_pressed_holo_dark" /> 
<item android:state_focused="true" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_focused_holo_dark" /> 
<item android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_focused="true" 
    android:drawable="@drawable/btn_default_disabled_focused_holo_dark" /> 
<item 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
</selector> 

그래서 사람들은 안드로이드 기본 (홀로그램 어두운) 테마의 표준하여 ImageButton의 배경에 사용하는 드로어 블 있습니다 : 어떤 경우에, 여기에 (그것의 XML 이후 /drawable 디렉토리에있는) 드로어 블입니다.

+0

감사합니다. 내가 찾고있는 드로어 블 디렉토리의 항목에 대한 힌트가 있습니까? 검색하는 것이 많습니다. –

+0

ImageButton이 일반 Button과 동일한 배경을 사용한다고 생각합니다. 또한 플랫폼 수준에 따라 다릅니다. 최신 버전의 Android에서는 btn_default_ {state} _holo_dark.9.png 및 btn_default_ {state} _holo_light.9.png이 찾고있는 도구라고 생각되지만 긍정적이지는 않습니다. 일반적으로 플랫폼 리소스에서 res/values ​​/ themes.xml 및 res/values ​​/ styles.xml을보고 정확히 무엇을 찾고 있는지 파악해야합니다. – Karakuri

+0

또한 내 대답은 왜 downvoted입니까? – Karakuri