3

画像ボタンの背景を変更したいです。基本的に、私が持っている画像は、透明な背景では見栄えがよく、透明でない背景を持つ画像がたくさんある場合は少しお粗末です。

これは簡単なはずです -android:backgroundボタンの色を (drawable を介して) 透明色に変更するだけです: 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_focussedは、実際には背景のとバージョンを保持したいということですstate_pressed(これはテーマから派生したものだと思います)。ボタンが押されたときにテーマで通常使用されるボタンが押されたとき、または選択されたときに背景が表示されるようにしたいと思います (そして、まったく同じ色/ドローアブルで表示されます)。

次のいずれかを行う方法があるかどうか疑問に思っていましたが、これまでのところ、どちらにも何も見つかりませんでした。

  1. あるものから別のものを継承するセレクターを定義します (テーマが別のものから継承できる方法に似ています)。

  2. まったく新しいセレクターを作成しますが、テーマの色/ドローアブルを XML で参照 し、イメージ ボタンstate_focussedに使用します。編集:このオプションは廃止されたようです。属性が必要でしたが、ドローアブルからそれらを参照することはできません。こちらをご覧くださいstate_pressed

可能であれば、プログラマティック Java ではなく、宣言型 XML でこれを行いたいと考えています。

4

1 に答える 1

3

Android OS で使用されるドローアブルをプロジェクトにコピーして、状態リスト ドローアブルで使用できます。あなたはで画像を見つけることができます{android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi]

編集: にアクセスすると、 Android で使用されるとファイル{android-sdk-directory}/platforms/android-##/data/res/valuesが見つかります。それらを使用して、探しているドローアブルを把握できます。themes.xmlstyles.xml

たとえば、新しいバージョンの Android のデフォルトのテーマはTheme.Holo. このテーマには、次のように宣言された ImageButtons のデフォルト スタイルがあります。

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

ではstyles.xml、このスタイルは次のように定義されています。

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

ありがたいことに、背景属性はすぐに定義されています。親スタイルから継承されている場合があり、代わりにそれを見つける必要があります。いずれにせよ、ドローアブルは/drawable次のとおりです(xmlであるため、ディレクトリにあります):

<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>

これらは、Android がデフォルト (holo dark) テーマの標準 ImageButton の背景に使用するドローアブルです。

于 2013-04-01T03:19:21.207 に答える