Как установить непрозрачность (альфа) для просмотра в 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 +:
![Gingerbread]()
![ICS]()
Копирование всех отображаемых состояний и изображений для каждого разрешения и создание прозрачных изображений - это боль, поэтому я выбрал более грязное решение: заверните кнопку в держатель, который имеет белый фон. Здесь грубый 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 white]()
![Too 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 white]()
![No 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>