it-swarm.com.de

Festlegen der Deckkraft (Alpha) für die Ansicht in Android

Ich habe eine Schaltfläche wie folgt:

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

In meinem onCreate() -Ereignis rufe ich Button01 folgendermaßen auf:

setContentView(R.layout.main);

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

Die Anwendung enthält einen Hintergrund, und ich möchte eine Deckkraft für diese Senden-Schaltfläche festlegen. Wie kann ich eine Deckkraft für diese Ansicht festlegen? Kann ich das auf der Seite Java) oder in der Datei main.xml einstellen?

Auf der Java Seite habe ich Button01.mutate().SetAlpha(100) ausprobiert, aber es gab mir einen Fehler.

195
ncakmak

Ich habe gerade Ihre Frage gefunden, als ich ein ähnliches Problem mit einem TextView hatte. Ich konnte es lösen, indem ich TextView erweiterte und onSetAlpha überschrieb. Vielleicht könnten Sie etwas Ähnliches mit Ihrem Knopf versuchen:

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;
  }
}
60
RoToRa

Ich bin erstaunt über die VIEL komplizierteren Antworten aller anderen.

XML

Sie können das Alpha ganz einfach in der Farbdefinition der Schaltfläche (oder einer anderen Ansicht) in Ihrer XML-Datei definieren:

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

Im obigen Beispiel wäre die Farbe ein teilweise transparentes Rot.

Beim Definieren der Farbe einer Ansicht kann das Format entweder #RRGGBB oder #AARRGGBB, wobei AA der hexadezimale Alpha-Wert ist. FF wäre völlig undurchsichtig und 00 wäre voll transparent.

Dynamisch

Wenn Sie die Deckkraft in Ihrem Code dynamisch ändern müssen, verwenden Sie

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

Wo die INT reicht von 0 (vollständig transparent) bis 255 (völlig undurchsichtig).

554
Jake Wilson

Möglicherweise haben Sie die Antwort bereits gefunden, aber wenn nicht (und für andere Entwickler), können Sie dies folgendermaßen tun:

btnMybutton.getBackground().setAlpha(45);

Hier habe ich die Deckkraft auf 45 eingestellt. Sie können sie grundsätzlich von (vollständig transparent) bis 255 (vollständig undurchsichtig) einstellen.

209
abhi

Ich würde vorschlagen, dass Sie eine benutzerdefinierte ARGB-Farbe in Ihrer colors.xml-Datei erstellen, z.

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

stellen Sie dann Ihren Schaltflächenhintergrund auf diese Farbe ein:

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

Eine andere Möglichkeit, mit der Form der Schaltfläche herumzuspielen, besteht darin, eine formziehbare Ressource zu erstellen, in der Sie die Eigenschaften festlegen, wie die Schaltfläche aussehen soll:

datei: res/drawable/round_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>

Dann benutze das als Hintergrund für den Button:

    Android:background="@drawable/rounded_corner_box"
67
Akos Cz

Laut der Android docs view alpha ist ein Wert zwischen 0 und 1. Also, um es einzustellen, verwenden Sie so etwas wie dieses:

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

Viel einfacher von oben. Das Standard-Alpha-Attribut ist für die Schaltfläche vorhanden

Android:alpha="0.5"

Der Bereich liegt zwischen 0 für vollständige Transparenz und 1 für vollständige Opazität.

40
Raja Jawahar
Android:background="@Android:color/transparent"

Das Obige ist etwas, das ich weiß ... Ich denke, eine benutzerdefinierte Button-Klasse zu erstellen, ist die beste Idee

API Level 11
Kürzlich bin ich auf dieses Android: alpha xml-Attribut gestoßen, das einen Wert zwischen 0 und 1 annimmt. Die entsprechende Methode ist setAlpha (float) .

19
Josnidhin

Obwohl btnMybutton.getBackground().setAlpha(45); eine gute Idee ist, wird Alpha nur auf den Hintergrund angewendet und nicht auf die gesamte Ansicht.

Wenn Sie Alpha anwenden möchten, verwenden Sie stattdessen btnMybutton.setAlpha(0.30f);. Hiermit wenden Sie die Deckkraft auf Ansicht an. Es akzeptiert einen Wert zwischen 0 und 1.

Doc sagt:

Legt die Deckkraft der Ansicht fest. Dies ist ein Wert von 0 bis 1, wobei 0 bedeutet, dass die Ansicht vollständig transparent ist und 1 bedeutet, dass die Ansicht vollständig undurchsichtig ist. Wenn diese Ansicht onSetAlpha (int) überschreibt, um true zurückzugeben, ist diese Ansicht für das Anwenden der Deckkraft selbst verantwortlich. Andernfalls entspricht das Aufrufen dieser Methode dem Aufrufen von setLayerType (int, Android.graphics.Paint) und dem Festlegen einer Hardwareebene. Beachten Sie, dass das Festlegen von Alpha auf einen durchscheinenden Wert (0 <Alpha <1) Auswirkungen auf die Leistung haben kann. Im Allgemeinen ist es am besten, die Alpha-Eigenschaft sparsam und vorübergehend zu verwenden, wie im Fall von Animationen, die ausgeblendet werden.

14
Hesam

Ich bin mit ICS/JB auf dieses Problem gestoßen, weil die Standardschaltflächen für das Holo-Thema aus Bildern bestehen, die leicht transparent sind. Für einen Hintergrund fällt dies besonders auf.

Lebkuchen vs. ICS +:

GingerbreadICS

Das Kopieren aller Zeichenzustände und Bilder für jede Auflösung und das Festigen der transparenten Bilder ist ein Problem. Daher habe ich mich für eine schmutzigere Lösung entschieden: Wickeln Sie den Knopf in eine Halterung mit weißem Hintergrund. Hier ist ein XML-Code (ButtonHolder), der genau das tut:

Ihre XML-Datei

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

Dies führt jedoch zu einem weißen Rand, da die Holo-Schaltflächen-Bilder Ränder enthalten, um die gedrückte Leerstelle zu berücksichtigen:

Too much whiteToo much white pressed

Die Lösung besteht also darin, dem weißen Hintergrund einen Rand (4dp hat bei mir funktioniert) und abgerundete Ecken (2dp) zuzuweisen, um das Weiß vollständig auszublenden, aber die Schaltfläche solide zu machen:

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>

Das Endergebnis sieht so aus:

No whiteNo white pressed

Sie sollten diesen Stil auf v14 + ausrichten und ihn für Gingerbread/Honeycomb optimieren oder ausschließen, da sich die nativen Bildgrößen der Schaltflächen von denen von ICS und JB unterscheiden (z. B. führt dieser genaue Stil hinter einer Lebkuchenschaltfläche zu einem kleines bisschen Weiß unter dem Knopf).

8
annie

Für eine Ansicht können Sie die Deckkraft folgendermaßen einstellen.

view_name.setAlpha(float_value);

Die Eigenschaft view.setAlpha(int) ist für die API-Version größer als 11 veraltet. Von nun an wird eine Eigenschaft wie .setAlpha(0.5f) verwendet.

6
Palash Dange

Für API <11 für TextView-Farbe habe ich Folgendes ausgeführt:

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

Ein bisschen umständlich, aber hey, es funktioniert :-)

5
EZDsIt

Ich weiß, dass dies bereits eine Reihe von Antworten enthält, aber ich habe festgestellt, dass es für Schaltflächen am einfachsten ist, eigene XML-Selektoren zu erstellen und diese auf den Hintergrund dieser Schaltfläche zu setzen. Auf diese Weise können Sie den Status auch ändern, wenn Sie gedrückt oder aktiviert sind und so weiter. Hier ist ein kurzer Ausschnitt von einem, den ich benutze. Wenn Sie einer der Farben eine Transparenz hinzufügen möchten, fügen Sie einen führenden Hex-Wert (#XXcccccc) hinzu. (XX == "Alpha der Farbe")

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