AndroidでViewの不透明度(アルファ)を​​設定する方法


211

次のようなボタンがあります。

<Button 
     android:text="Submit" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content">
</Button>

私のonCreate()イベントでは、次のようにButton01を呼び出しています。

setContentView(R.layout.main);

View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);

アプリケーションに背景があり、この送信ボタンに不透明度を設定したい。このビューの不透明度を設定するにはどうすればよいですか?Java側で設定できるものですか、それともmain.xmlファイルで設定できますか?

Java側で試してみButton01.mutate().SetAlpha(100)ましたが、エラーが発生しました。

回答:


64

TextViewで同様の問題が発生しているときに、あなたの質問を見つけました。TextViewを拡張してをオーバーライドすることで解決できましたonSetAlpha。たぶんあなたはあなたのボタンで同様のことを試すことができます:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}

12
おかげで、これは私にも役立ちました。ただし、TextViewとImageViewでアルファを設定する方法が異なるのはばかげています。
ジェラルドナシメント2010

これは、2番目のリソースなしで画像ビューにクリック効果を適用するのにも役立ちました。ありがとう!
skygeek 2013年

568

私は皆のことで驚いてMUCHより複雑な答え。

XML

非常に単純に、XMLのボタン(または他のビュー)の色定義でアルファを定義できます。

android:color="#66FF0000"    // Partially transparent red

上記の例では、色は部分的に透明な赤になります。

ビューの色を定義する場合、形式はまたはのいずれ#RRGGBBかです。#AARRGGBBここAAで、は16進アルファ値です。FF完全に不透明で、00完全に透明になります。

動的に

コードの不透明度を動的に変更する必要がある場合は、

myButton.getBackground().setAlpha(128);  // 50% transparent

INTの範囲は0(完全に透明)から255(完全に不透明)です。


18
あなたは化合物の描画可能を持っている場合、これはまだ解決策ではない
のMichałK

6
ビューの半透明の緑色を設定します:<RelativeLayout android:background = "#8700FF00" />
Jonny

2
ビューにはandroid:color属性がありません。
ロニー

6
@moshersan android:backgroundプロパティ自体で色を設定できます!
Dheeraj Bhaskar 2013

1
それは不正確ですbackground不透明度は不透明度ではありませんview。多くのユースケースで同等ではない
Jocky Doe

215

私はあなたがすでに答えを見つけたかもしれないと思いますが、もしそうでなければ(そして他の開発者にとって)、あなたは次のようにそれを行うことができます:

btnMybutton.getBackground().setAlpha(45);

ここでは、不透明度を45に設定しています。基本的には、0(完全に透明)から255(完全に不透明)までの範囲で設定できます。


5
これは、APIでのみ使用可能です11+ developer.android.com/reference/android/view/...
グレアム・

8
@GraemeはViewクラスのsetAlphaメソッドにリンクしていますが、投稿はDrawableクラスのsetAlphaを使用しています。getBackgroundメソッドはDrawableを返します。このメソッドは、APIレベル1からであるdeveloper.android.com/reference/android/graphics/drawable/...
Geekygecko

おもしろい!見なかった。これは、背景が透明に設定されている場合でも、テキストが完全に表示されることを意味しますか。
グレアム・

-1これは、私の背景のドローアブルがセレクターである私の場合には機能しません。
マイクS

3
これはうまくいきますが、副作用が1つあります。同じ背景を共有する多くのボタンがあり、それらはすべて透明になります!:(
マーク

66

私が提案することは、colors.xmlファイルに次のようなカスタムARGBカラーを作成することです。

<resources>
<color name="translucent_black">#80000000</color>
</resources>

次に、ボタンの背景をその色に設定します。

android:background="@android:color/translucent_black"

ボタンの形状をいじりたい場合にできるもう1つのことは、ボタンの外観をプロパティに設定するShapeドローアブルリソースを作成することです。

ファイル:res / drawable / rounded_corner_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#80000000"
        android:endColor="#80FFFFFF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

次に、それをボタンの背景として使用します。

    android:background="@drawable/rounded_corner_box"

6
40%の不透明度から16進数の値に
変換するのに

54

android docsビューによると、alphaは0から1までの値です。したがって、設定するには次のようにします。

View v;
v.setAlpha(.5f);

これが、ビュー全体でしか機能しなかったものです...複数のテキストビューを持つリストビューアイテムを試してみました。この単一行は、ビューとその子にアルファを設定するのに役立ちました。ありがとう@ cange1
Alyas

私にとってもうまくいったことだけ。私はこれが古いことを知っていますが、@ cange1に感謝します
masoftheund

50

上記よりはるかに簡単です。ボタンにはデフォルトのアルファ属性があります

android:alpha="0.5"

範囲は、完全に透明な場合は0、完全な不透明な場合は1です。


これはまさに私が探していたもので、すばらしい、api 21でテストされました
Fernando Torres

完璧な答え!
ハリー.Naeem

18
android:background="@android:color/transparent"

上記は私が知っていることです...カスタムボタンクラスを作成することが最良のアイデアだと思います

APIレベル11
最近、私はこのandroid:alpha xml属性に遭遇しました。この属性は0〜1の値を取ります。対応するメソッドはsetAlpha(float)です。


こんにちはジョスニディン。お返事ありがとうございます。ただし、ボタン全体が完全に透明になります。私が見ているのは、ボタンに不透明度(多分アルファ値)を付けていることです。
ncakmak 2010年

これは浮動小数点なので、たとえば0と1、0.5の間の値を使用できます。
StackOverflowed 2013

@StackOverflowed-私はncakmakが最初のソリューションを意味すると信じています。@android:color/transparent背景に設定すると、ビューは完全に透明になります。@android:alpha-部分は、補遺のようです。
カッツェンハット

17

が、btnMybutton.getBackground().setAlpha(45);いいアイデアがある、それだけで、背景と全体ではなくビューにアルファを適用します。

アルファをビューに適用する場合は、btnMybutton.setAlpha(0.30f);代わりに使用してください。これにより、ビューに不透明度が適用されます。0〜1の値を受け入れます。

ドクは言う:

ビューの不透明度を設定します。これは0から1までの値で、0はビューが完全に透明であることを意味し、1はビューが完全に不透明であることを意味します。このビューがonSetAlpha(int)をオーバーライドしてtrueを返す場合、このビューは不透明度自体を適用する必要があります。それ以外の場合、このメソッドを呼び出すことは、setLayerType(int、android.graphics.Paint)を呼び出してハードウェアレイヤーを設定することと同じです。alphaを半透明の値(0 <alpha <1)に設定すると、パフォーマンスに影響する可能性があることに注意してください。フェードアニメーションの場合のように、アルファプロパティは控えめに、一時的に使用するのが一般的に最善です。


7

Holoテーマのデフォルトのボタンは少し透明な画像で構成されているため、ICS / JBでこの問題に遭遇しました。背景については、これは特に顕著です。

ジンジャーブレッドとICS +:

ジンジャーブレッド ICS

各解像度のすべての描画可能な状態と画像をコピーし、透明な画像を塗りつぶすのは面倒なので、私は汚れた解決策を選択しました:背景が白いホルダーにボタンをラップします。以下は、まさにそれを行う粗雑なXMLドローアブル(ButtonHolder)です。

あなたのXMLファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              style="@style/Content">
  <RelativeLayout style="@style/ButtonHolder">
      <Button android:id="@+id/myButton"
              style="@style/Button"
              android:text="@string/proceed"/>
    </RelativeLayout>
</LinearLayout>

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
    </shape>
  </item>

</layer-list>

styles.xml

.
.
.      
  <style name="ButtonHolder">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:background">@drawable/buttonholder</item>
  </style>

  <style name="Button" parent="@android:style/Widget.Button">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:textStyle">bold</item>
  </style>
.
.
.

ただし、ホロボタンの画像には、押されたスペースに対応するためのマージンが含まれているため、白い境界線になります。

白が多すぎる 白が多すぎます

したがって、解決策は、白の背景にマージン(4 dpがうまく機能した)と丸みを帯びた角(2 dp)を与えて、白を完全に非表示にし、ボタンを無地にすることです。

ButtonHolder.xml

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

  <item>
    <shape android:shape="rectangle">
      <solid android:color="@android:color/transparent"/>
    </shape>
  </item>

  <item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
      <corners android:radius="2dp" />
    </shape>
  </item>

</layer-list>

最終的な結果は次のようになります。

白なし 白は押されていません

このスタイルはv14 +をターゲットにし、Gingerbread / Honeycombは微調整または除外する必要があります。これは、ネイティブボタンの画像サイズがICSおよびJBと異なるためです(たとえば、Gingerbreadボタンの背後にあるこの正確なスタイルは、ボタンの下に小さな白をもたらします)。


7

ビューの場合、次の方法で不透明度を設定できます。

view_name.setAlpha(float_value);

このプロパティview.setAlpha(int)は、11以降のAPIバージョンでは非推奨です。今後は、プロパティlike .setAlpha(0.5f)が使用されます。


6

textView colorのAPI <11の場合、次のようにしました。

int textViewColor = textView.getTextColors().getDefaultColor(); 
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent

少し面倒ですが、ちょっと、うまくいきます:-)


1

私はすでにこれにたくさんの答えがあることを知っていますが、ボタンの場合、独自の.xmlセレクターを作成し、それをボタンの背景に設定するのが最も簡単であることがわかりました。このようにして、押されたときや有効になったときに状態を変更することもできます。ここに私が使用するものの簡単なスニペットがあります。いずれかの色に透明度を追加する場合は、先頭の16進値(#XXcccccc)を追加します。(XX == "色のアルファ")

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#70c656" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#70c656"
                android:endColor="#53933f"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.