web-dev-qa-db-ja.com

Android ImageButtonの背景色

透明度のある背景画像の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>
12
Ayyoudy

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

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

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

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

focused

pressed

1
FoamyGuy

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

Xmlの例があるので、このリンクを参照してください: 標準Android異なる色のボタン

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

参照: 標準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"を設定して、このセレクターをボタンに適用できます。

3
Joanne

ImageButtonの代わりにImageViewを使用して、問題を解決できます。 ImageViewのAndroid:backgroundプロパティを親の背景色に設定してください。

1
user2687744

あなたはあなたのxmlファイルにこれを書くことができます:

Android:background="@null"

それは私のために働いた。

1
Kaspis245

デフォルトの灰色の背景が不要で、ImageButtonが背景のないアイコンのように見える場合は、Android:background属性を使用して次のように設定します。

@Android:color/transparent** 
<ImageButton
Android:id="@+id/ImageButton05"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="@Android:color/transparent"
Android:background="@drawable/button" />

誰かを助けることを願っています

0
Mohamed Ayed