Как установить непрозрачность (альфа) для просмотра в Android

У меня есть кнопка, как показано ниже:

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

Ответ 1

Я только что нашел ваш вопрос, имея аналогичную проблему с 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;
  }
}

Ответ 2

Меня поражают все остальные MUCH более сложные ответы.

XML

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

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

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

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

Динамически

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

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

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

Ответ 3

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

btnMybutton.getBackground().setAlpha(45);

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

Ответ 4

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

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

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

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

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

file: 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"

Ответ 5

В соответствии с представлением android docs альфа - это значение от 0 до 1. Поэтому, чтобы установить его, используйте что-то вроде этого:

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

Ответ 6

Намного легче из вышеперечисленного. Альфа-атрибут по умолчанию есть для кнопки

android:alpha="0.5"

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

Ответ 7

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

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

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

Ответ 8

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

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

Док говорит:

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

Ответ 9

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

Прямоугольник против ICS +:

GingerbreadICS

Копирование всех отображаемых состояний и изображений для каждого разрешения и создание прозрачных изображений - это боль, поэтому я выбрал более грязное решение: заверните кнопку в держатель, который имеет белый фон. Здесь грубый XML drawable (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 whiteToo much white pressed

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

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 whiteNo white pressed

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

Ответ 10

Для API < 11 для цвета textView Я сделал следующее:

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

Немного громоздко, но эй, это работает: -)

Ответ 11

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

view_name.setAlpha(float_value);

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

Ответ 12

Я знаю, что у этого уже есть куча ответов, но я обнаружил, что для кнопок проще всего создавать свои собственные .xml-селектора и устанавливать их на фоне указанной кнопки. Таким образом вы также можете изменить его состояние при нажатии или включении и так далее. Вот быстрый фрагмент того, который я использую. Если вы хотите добавить прозрачность к любому из цветов, добавьте начальное шестнадцатеричное значение (#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>