12

透明度のある背景画像を持つ ImageButton があります。デフォルトでは、Holo.Light テーマにより、ボタンは透明度ピクセルがある場所に灰色の背景を取得します。メソッドでボタンの背景色を透明に設定してみましたsetBackgroundColor(Color.TRANSPARENT)。それはうまく機能し、私が必要とすることを実行しますが、フォーカス/プレス時にボタンが水色ではなくなり、かなりフラットに見えます(周囲に境界線がないため、画像のように見えます)。

ここで説明されているようにセレクターを割り当てることができることをグーグルで調べましたが、それはボタンの状態ごとに画像を指定する必要があり、それをしたくないことを意味します。テーマからフォーカス/押された色を継承したいのですが、通常のボタンの背景 (押されていない/フォーカスされていないとき) を灰色ではなく透明に上書きします。どうすればそれを達成できますか?? 成功しなかった多くの異なる組み合わせを試したので、実際の例を提供してください。

編集 助けてくれてありがとう。各ボタンのフォーカス状態と押された状態で同じ画像を再作成する必要なく、これを機能させる方法を見つけました!

これが私の解決策です:

私のボタンは次のように定義されています:

<ImageButton
            android:id="@+id/ImageButton05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/button" />

また、バックグラウンド XML ファイル (button.xml というタイトル) は次のように定義されています。

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

    <item android:state_pressed="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_pressed_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item android:state_focused="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_focused_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item android:state_hovered="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_focused_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item android:drawable="@drawable/btn_default_normal_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
</selector>
4

5 に答える 5

3

たとえば、xml ファイルに何かを入れて、ボタン ビューcustom_button.xmlに設定することができます。background="@drawable/custom_button"

xml の例があるので、このリンクを参照してください: Standard Android Button with a different color

コードで使用したところ、思いどおりに機能しました。

参考: 色違いの標準Androidボタン


編集:

むしろ使用したい場合は、境界線を設定してみてください。例 (参照: Android - ボタンの境界線):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00"
    android:angle="270" />
  <corners android:radius="3dp" />
  <stroke android:width="5px" android:color="#000000" />
</shape>

または、ボタンのスタイル/テーマを設定することもできます。(ただし、別のファイルになります)スタイル/テーマには、フォーカス/有効/無効/など、ボタンのさまざまな状態の色属性が含まれています.

背景色/画像を設定し、クリックのハイライト効果を持たせるための例です (参照:ビューでスタイル属性をプログラムで設定する方法)

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

プロパティ android:background="@drawable/my_button" を設定することで、このセレクターをボタンに適用できます。

于 2012-07-24T01:58:04.887 に答える
1

テーマからフォーカス/押された色を継承したいのですが、通常のボタンの背景 (押されていない/フォーカスされていないとき) を灰色ではなく透明に上書きします。どうすればそれを達成できますか??

フォーカス/押された色は、灰色の背景を含む同じ画像リソースに組み込まれているため、できません。

システムのフォーカス/押された状態を維持したいが、背景を削除したい場合は、画像リソースのコピーを取得する必要があります (これは SDK の/sdkroot/platforms/[version]/data/res/drawable-hdpi[バージョン] を任意の API レベルに置き換えて見つけることができます。必要に応じてhdpi を別の密度に置き換えます)、フォト エディターで灰色のボタンを編集します。次に、変更した画像を参照するセレクターを作成し、それをボタンの背景として設定します。

編集: これは、フォーカスおよび押された場合のデフォルトのホロボタン画像です

集中

押された

于 2012-07-24T01:56:50.570 に答える