Фон кнопки как прозрачный

177

У меня есть кнопка. Когда я нажимаю кнопку, я должен сделать текст жирным шрифтом, в противном случае нормальный. Поэтому я написал стили для жирного и нормального.

<style name="textbold" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
<style name="textregular" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">normal</item>
</style>

Теперь у меня есть button_states.xml как:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
    style="@style/textbold" />
<item android:state_focused="false" android:state_pressed="true"
    style="@style/textregular" />

<item style="@style/textregular" />
</selector> 

В моем макете для этой кнопки я должен сделать фон также прозрачным ... Как я это сделаю? Мой код макета:

<Button android:id="@+id/Btn" android:background="@drawable/button_states" />

Как включить прозрачный фон в моем стиле?

Анжу
источник
3
Многие из этих хороших ответов уже могут быть приняты ...
QED
проверьте этот ответ здесь, чтобы сделать прозрачную кнопку с рамкой
Basheer AL-MOMANI
'почему бы вам просто не использовать TextView и не вызывать его на onClick?
Dula wnRp

Ответы:

360

Чтобы сделать фон прозрачным, просто сделайте android:background="@android:color/transparent".

Однако ваша проблема, кажется, немного глубже, поскольку вы используете селекторы действительно странным образом. То, как вы используете это, кажется неправильным, хотя, если это действительно работает, вы должны поместить фоновое изображение в стиль как <item/>.

Посмотрите, как стили используются в источнике Android. Хотя они не меняют стиль текста при нажатии кнопок, есть много хороших идей о том, как достичь своих целей.

Стив Померой
источник
1
Посмотрите на мой уточненный ответ. Я неправильно понял вашу проблему, чтобы начать. Фон устанавливается в стиле.
Стив Померой
Извините, мне неясно решение. Просто установка @android: color / transparent не поддерживает стили на ощупь, которые есть у обычных кнопок (и эквивалентно установке фона на @null).
gatoatigrado
@gatoatigrado: ты имеешь в виду, что ты хочешь, чтобы прозрачная область была обведена оранжевым или закрашена каким-то образом? Если это так, вам нужно создать собственные 9-патч изображения для этого.
Стив Помрой
@StevePomeroy, да, эффект кнопки по умолчанию на Android 4.1 - для [при нажатии кнопки] фон должен быть светло-синим с еще более светлым синим контуром.
gatoatigrado
@gatoatigrado: хорошо. Если вы хотите этого, то вы не можете использовать прозрачную кнопку. Я не уверен, чего вы там добиваетесь.
Стив Померой
121

Попробуйте новый способ установить прозрачный фон

    android:background="?android:attr/selectableItemBackground"
Мухаммед Амир Али
источник
9
Это то, что я бы порекомендовал использовать. Таким образом, вы можете сохранить красивые анимации дизайна материала для ваших кнопок =)
Райан Ньюсом,
это лучший ответ
Маркос Давалос
35

используйте #0000(только четыре нуля, иначе это будет считаться black) это цветовой код для прозрачного. Вы можете использовать его напрямую, но я рекомендую вам определить цвет в color.xml, чтобы вы могли наслаждаться повторным использованием кода.

Prasham
источник
9
К счастью, это уже было определено для нас как@android:color/transparent
Ричард Ле Мезурье
34

Добавьте это в свой XML -android:background="@android:color/transparent"

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Button"
            android:background="@android:color/transparent"
            android:textStyle="bold"/>
Mohanraj
источник
32

Вы также можете использовать: в вашем xml:

android:background="@null"

или в коде:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);
Hunkeone
источник
Upvote для предоставления альтернативы, люблю видеть все варианты!
Burkely91
18

Я достиг этого с помощью XML с

android:background="@android:color/transparent"
К. Скьердал
источник
9

я использовал

btn.setBackgroundColor(Color.TRANSPARENT);

и

android:background="@android:color/transparent"
Синдри Лор
источник
btn.setBackgroundColor (Color.TRANSPARENT); у меня отлично работает
jay_mziray
8

Селекторы работают только для рисования, а не для стилей. Ссылка


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

style="?attr/buttonBarButtonStyle"

Есть много способов стилизовать вашу кнопку. Проверьте этот учебник .

Во-вторых , чтобы сделать текст жирным при нажатии, используйте этот код Java:

btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            // When the user clicks the Button
            case MotionEvent.ACTION_DOWN:
                btn.setTypeface(Typeface.DEFAULT_BOLD);
                break;

            // When the user releases the Button
            case MotionEvent.ACTION_UP:
                btn.setTypeface(Typeface.DEFAULT);
                break;
        }
        return false;
    }
});
Faraz
источник
1

Вы можете достичь этого, установив цвета альфа-канала.

Цветовая схема такая: #AARRGGBB, где A обозначает альфа-канал (прозрачность), R обозначает красный, G обозначает зеленый и B обозначает синий.

Рафаэль С
источник
1

Шаг 1: Создайте новый файл ресурсов в Drawable и скопируйте и вставьте

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

    <stroke android:color="#fff" android:width="2dp"/>
    <corners android:radius="25dp"/>
    <padding android:right="15dp" android:top="15dp" android:bottom="15dp" android:left="15dp"/>
</shape>

сохранить его как ButtonUI (скажем)

Шаг 2. Примените пользовательский интерфейс к кнопке xml

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="join the crew"
  android:background="@drawable/ButtonUI"
  android:textColor="#fff"/>
Вирадж Сингх
источник
0

Код:

button.setVisibility(View.INVISIBLE);

Xml:

android:background="@android:color/transparent"
Главный Мадог
источник
0

Мы можем использовать атрибут android: background в Button xml, как показано ниже.

android:background="?android:attr/selectableItemBackground"

Или мы можем использовать стиль

style="?android:attr/borderlessButtonStyle" для прозрачного и теневого фона.

Шихаб Уддин
источник
-2

Вы применяете цвет фона, как transparent(light gray)при нажатии кнопки.

ButtonName.setOnClickListener()

В приведенном выше методе вы устанавливаете цвет фона кнопки.

Pinki
источник
6
Опасаясь, что за это проголосовали. Не делай этого, пожалуйста. Будущий сопровождающий проклянет ваше имя. Установите фон с помощью селектора, и выберите один цвет / рисунок для нажатия и один для нет. Не пишите код, чтобы изменить его в слушателе - это НЕ так, как это делается.
themightyjon
-2

Вы можете сделать это легко, добавив ниже атрибут в файл XML. Этот код был проверен много раз.

android:background="@android:color/transparent"
Хамат Дживан
источник
2
Зачем добавлять этот ответ? Это решение уже есть в двух других ответах, включая тот, который набрал наибольшее количество голосов.
Макьен