Как установить непрозрачность (альфа) для просмотра в Android - PullRequest
194 голосов
/ 15 мая 2010

У меня есть кнопка, как в следующем:

<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), но это дало мне ошибку.

Ответы [ 12 ]

551 голосов
/ 07 октября 2011

Я поражен, все остальные НАМНОГО более сложные ответы.

XML

Вы можете очень просто определить альфа в определении цвета кнопки (или любого другого представления) в вашем xml:

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

В приведенном выше примере цвет будет частично прозрачным красным.

При определении цвета вида формат может быть либо #RRGGBB, либо #AARRGGBB, где AA - это шестнадцатеричное альфа-значение. FF будет полностью непрозрачным, а 00 будет полностью прозрачным.

Динамически

Если вам нужно динамически изменить прозрачность в вашем коде, используйте

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

Где INT находится в диапазоне от 0 (полностью прозрачный) до 255 (полностью непрозрачный).

209 голосов
/ 01 марта 2011

Я думаю, вы, возможно, уже нашли ответ, но если нет (и для других разработчиков), вы можете сделать это так:

btnMybutton.getBackground().setAlpha(45);

Здесь я установил непрозрачность на 45. В принципе, вы можете установить ее от любого значения от 0 (полностью прозрачный) до 255 (полностью непрозрачный)

67 голосов
/ 28 января 2011

Я бы предложил вам создать собственный ARGB цвет в вашем файле colors.xml, например:

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

затем установите цвет фона кнопки:

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

Еще одна вещь, которую вы можете сделать, если хотите поиграть с формой кнопки, - это создать Ресурс для рисования фигур , где вы устанавливаете свойства, как должна выглядеть кнопка:

файл: 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"
60 голосов
/ 25 мая 2010

Я только что нашел ваш вопрос, когда у меня была похожая проблема с 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;
  }
}
46 голосов
/ 14 мая 2013

В соответствии с представлением Android-документов альфа - это значение от 0 до 1. Поэтому для установки используйте что-то вроде этого:

View v;
v.setAlpha(.5f);
38 голосов
/ 14 января 2016

Намного проще из вышеперечисленного. Для кнопки

есть альфа-атрибут по умолчанию.
android:alpha="0.5"

Диапазон составляет от 0 для полной прозрачности до 1 для полной прозрачности.

19 голосов
/ 15 мая 2010
android:background="@android:color/transparent"

Это то, что я знаю ... Я думаю, что создание пользовательского класса кнопок - лучшая идея

Уровень API 11
Недавно я столкнулся с этим атрибутом android: alpha xml, который принимает значение от 0 до 1. Соответствующий метод - setAlpha (float) .

14 голосов
/ 06 июня 2013

Хотя btnMybutton.getBackground().setAlpha(45); хорошая идея, она просто применяет альфа к фону, а не ко всему виду.

Если вы хотите применить альфа для просмотра, используйте btnMybutton.setAlpha(0.30f);. Это применить непрозрачность для просмотра. Он принимает значение от 0 до 1.

Док говорит:

Устанавливает непрозрачность вида. Это значение от 0 до 1, где 0 означает, что вид полностью прозрачен, а 1 означает, что вид полностью непрозрачный. Если это представление переопределяет onSetAlpha (int) для возврата правда, тогда это представление отвечает за применение самой непрозрачности. В противном случае вызов этого метода эквивалентен вызову setLayerType (int, android.graphics.Paint) и настройка оборудования слой. Обратите внимание, что установка альфа в полупрозрачное значение (0 <альфа <1) может иметь последствия для производительности. Как правило, лучше всего использовать Альфа-свойство экономно и временно, как в случае исчезновения анимации. </p>

8 голосов
/ 21 марта 2013

Я столкнулся с этой проблемой с ICS / JB, потому что кнопки по умолчанию для темы Holo состоят из слегка прозрачных изображений. Для фона это особенно заметно.

Пряник против ICS +:

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

Однако это приводит к появлению белой границы, потому что изображения кнопок Holo включают поля для учета нажатого пространства:

Too much white Too much white pressed

Таким образом, решение состоит в том, чтобы дать белому фону запас (4дп работал для меня) и закругленные углы (2дп), чтобы полностью скрыть белый цвет, но сделать кнопку сплошной:

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>

Окончательный результат выглядит следующим образом:

No white No white pressed

Вы должны выбрать этот стиль для v14 +, а также настроить или исключить его для Gingerbread / Honeycomb, потому что размеры их собственных кнопок отличаются от ICS и JB (например, этот точный стиль за кнопкой Gingerbread приводит к появлению небольшого белого цвета под кнопка).

6 голосов
/ 28 декабря 2015

Для вида вы можете установить непрозрачность следующим образом.

view_name.setAlpha(float_value);

Свойство view.setAlpha(int) устарело для версии API больше 11. Отныне используется свойство типа .setAlpha(0.5f).

...