Фон кнопки максимально прозорий


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


"чому ви просто не використовуєте TextView і не викликаєте дію на onClick від нього?
Дула wnRp

Відповіді:


360

Щоб зробити фон прозорим, просто зробіть android:background="@android:color/transparent".

Однак ваша проблема здається трохи глибшою, оскільки ви використовуєте селектори по-справжньому дивно. Те, як ви користуєтеся, здається неправильним, хоча, якщо це насправді працює, вам слід надати фонове зображення у стилі як <item/>.

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


1
Погляньте на мою уточнену відповідь. Я неправильно прочитав вашу проблему для початку. Фон задається в стилі.
Стів Померой

Вибачте, мені не зрозуміло рішення. Просто налаштування @android: кольоровий / прозорий не підтримує стилі на дотик, які мають звичайні кнопки (і еквівалентно встановленню фону на @null).
gatoatigrado

@gatoatigrado: ти маєш на увазі, що хочеш, щоб прозора область була окреслена помаранчевим кольором або заштрихована в чомусь? Якщо це так, вам потрібно буде створити для цього власні 9-латні зображення.
Стів Померой

@StevePomeroy, так, ефект кнопки за замовчуванням на Android 4.1 - це для [натискання кнопки] фон світло-синього кольору з ще більш світлим синім контуром.
gatoatigrado

@gatoatigrado: гаразд. Якщо ви цього хочете, ви не можете використовувати прозору кнопку. Я не впевнений, що ви намагаєтеся досягти там.
Стів Померой

121

Спробуйте новий спосіб встановити фон прозорим

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

9
Це я рекомендував би використовувати. Таким чином ви зможете зберегти прекрасні анімаційні матеріали для своїх кнопок =)
Ryan Newsom

це краща відповідь
Маркос Давалос,

35

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


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"/>

32

Ви також можете використовувати: у своєму xml:

android:background="@null"

або в коді:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);

Оновлення за надання альтернатив, люблю бачити всі варіанти!
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;
    }
});

1

Ви можете досягти цього, встановивши альфа-канал кольорів.

Колірна гамма така, як ця #AARRGGBB. Там A означає альфа-канал (прозорість), R - червоний, G - зелений і B - синій.


1

Крок 1: Створіть новий файл ресурсів у папці, що малюється та скопіюється

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

Ми можемо використовувати атрибут android: фон у кнопці xml, як показано нижче.

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

Або ми можемо використовувати стиль

style="?android:attr/borderlessButtonStyle" для прозорого та тіні менше фону.


-2

Колір фону ви застосовуєте, як transparent(light gray)при натисканні на кнопку.

ButtonName.setOnClickListener()

У наведеному вище способі ви встановлюєте колір фону кнопки.


6
Турбує, що це було сприйнято. Не робіть цього, будь ласка. Майбутній супровідник проклясть ваше ім’я. Встановіть фон за допомогою селектора, а також натисніть один колір / малюнок для натиснутого та один для не. Не пишіть код, щоб змінити його в слухачі - це НЕ, як це робиться.
themightyjon

-2

Це легко зробити, додавши нижче атрибут у xml-файл. Цей код перевіряли багато часу.

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

2
Навіщо додати цю відповідь? Це рішення є вже в двох інших відповідях, включаючи ту, що має найбільше голосів.
Макіен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.