Кнопки дизайну матеріалів для Android - Попередньо льодяник


75

Як застосувати "підняту кнопку" та "плоску кнопку", як описано в інструкціях щодо дизайну матеріалів Google?


Підняті кнопки додають розмір переважно плоским макетам. Вони підкреслюють функції на зайнятих або широких приміщеннях.

підняті кнопки


Використовуйте плоскі кнопки для панелей інструментів та діалогових вікон, щоб уникнути надмірного шарування.

плоскі кнопки

Джерело: http://www.google.com/design/spec/components/buttons.html



1
Можливий дублікат stackoverflow.com/questions/26346727/…
rds

Можливо, це має бути дублікат (мені незрозуміло). Але ця близька причина просто неправильна.
Yishai

Відповіді:


121

Для цього потрібен Android 5.0

Піднята кнопка

Успадкуйте свій стиль кнопки від Widget.Material.Button, і стандартна дія висоти та підйому буде застосована автоматично.

<style name="Your.Button" parent="android:style/Widget.Material.Button">
    <item name="android:background">@drawable/raised_button_background</item>
</style>

Потім вам потрібно створити raised_button_background.xmlфайл із кольором тла вашої кнопки всередині тегу пульсацій:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="@color/button_color"/>
</ripple>

Плоска кнопка

Редагувати: Замість моєї попередньої поради щодо плоских кнопок, вам слід скористатися наступною порадою Стівена Кайзера нижче:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?android:attr/borderlessButtonStyle"
/>

Редагувати: якщо ви використовуєте бібліотеку підтримки, ви можете досягти такого ж результату на пристроях Pre-Lollipop за допомогою style="?attr/borderlessButtonStyle". (зауважте відсутність android:) Наведений приклад тоді стає

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?attr/borderlessButtonStyle"
/>

Дякую і вибачте за цю пізню відповідь. Чи можна досягти такого ж результату за допомогою бібліотеки підтримки? Я успадкував свою тему від Theme.AppCompat.Light.DarkActionBar і в Android Studio я бачу підняте, але я хочу, але коли я запускаю програму на своєму телефоні (api 17), я бачу звичайну кнопку
rickyalbert

3
Будь-який спосіб змусити стиль піднятої кнопки працювати на попередньому льодянику? Навіть фальшивий стиль?
розробник android

2
Вимкнені / Увімкнені стани виглядають однаково. Як це виправити?
ViliusK

2
Чому плоска кнопка (без полів) не підкреслює акцентний колір, використовуючи дизайн матеріалу? Краще використовувати buttonBarButtonStyle?
загублений переклад

1
@lostintranslation, оскільки в базовій темі AppCompat borderlessButtonStyleвстановлено значення @style/Widget.AppCompat.Button.Borderless. Якщо ви хочете, щоб він витягував акцентний колір, встановіть borderlessButtonStyleдля параметра "Тема" значення @style/Widget.AppCompat.Button.Borderless.Colored.
pumpkinpie65

84

Для того, щоб реалізувати плоскі кнопки, ви можете просто додати style="?android:attr/borderlessButtonStyle".

Приклад:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?android:attr/borderlessButtonStyle"
    />

Ось посилання на атрибут.


3
Фантастичний, і він підтримує повернення до рівня API 11.
Габріель

@StephenKaiser Як щодо піднятих кнопок?
Farbod Salamat-Zadeh

4
style="@style/Widget.AppCompat.Button.Borderless"при використанні бібліотеки AppCompat
Майкл Казарян

4

Ви можете використовувати MaterialDesignLibrary . Це стороння бібліотека.

Це бібліотека з компонентами Android L, яку ви використовуєте в android 2.2. Якщо ви хочете використовувати цю бібліотеку, вам потрібно лише завантажити проект MaterialDesign, імпортувати його у свою робочу область та додати проект як бібліотеку в налаштуваннях проекту Android.


2

Я працюю над бібліотекою сумісності матеріалів. Клас кнопок існує і підтримує анімовані тіні та пульсації дотиків. Можливо, вам це стане в нагоді. Ось посилання .


Чоловіче, це приголомшливо. Як включити aar lib через gradle?
kiruwka

Цікаво, наскільки це стабільно для використання в реальному житті? у вас були збої, пов’язані з кнопками: тіні / брижі? Дякую
kiruwka

Я тестую це на реальному проекті і роблю все можливе, щоб це працювало. Бібліотека знаходиться в стадії інтенсивного розвитку, я намагаюся виправити всі повідомлення про помилки протягом 24 годин. У більшості випадків бібліотека не виходить з ладу, а навпаки, видає анімаційні збої або просто відстає. На даний момент двома найбільшими проблемами є: 1. відсутність потоку візуалізації (представлена ​​в Lollipop) та 2. сумісність з усіма графічними процесорами та інтерфейсами користувача (наприклад, TouchWiz, що використовується в серії Galaxy). Якщо у вас є якісь інші запитання, ви хочете попросити функцію або повідомити про помилку, не соромтеся зв’язуватися зі мною. Я щойно оновив сторінку "Про мене" у своєму блозі, щоб зробити це простішим.
Zielony

2

Я використовую це як фон для кнопки з AppCompat, і на ньому зображена піднята кнопка (з усіма пульсаціями), сподіваюся, це допоможе.

myRaisedButton.xml - всередині drawableпапки:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
               android:shape="rectangle">
            <solid android:color="@color/yourColor"/>
            <corners android:radius="6dp"/>
        </shape>
    </item>
    <item android:drawable="?android:selectableItemBackground"/>
</layer-list>

styles.xml :

<resources>

    <style name="AppTheme" parent="AppTheme.Base"/>
    <style name="AppTheme.Base" parent="Theme.AppCompat">

</resources>

styles.xml (v21) :

...
<style name="AppTheme" parent="AppTheme.Base">

layout.xml :

...
android:background="@drawable/myRaisedButton"

Де ви використовуєте цей xml? У папці, яку можна малювати?
rickyalbert

Так, назвіть його, наприклад, myRaisedButton.xml і отримайте до нього доступ із вашого макета за допомогою android: background = "@ drawable / myRaisedButton"
thanosChatz

Дякую, це працює! Мені довелося видалити останній рядок, оскільки я отримав виняток, як я можу це виправити? Вибачте, але у мене все ще є проблеми з роботою зі стилями в xml
rickyalbert,

1
Чому ви зробили так, щоб файли styles.xml вказували на один і той же стиль ("AppTheme.Base")? Я не бачу тут доданої функціональності ...
розробник android

3
Цей код генерує виняток і не створює підняту кнопку.
Steve M

1

Для опису того, як це зробити за допомогою бібліотеки appcompat, перевірте мою відповідь на інше запитання: https://stackoverflow.com/a/27696134/1932522

Це покаже, як використовувати підняті та плоскі кнопки як для Android 5.0, так і раніше (до рівня API 11)!


style = "? android: attr / borderlessButtonStyle" не є стилем appCompat. Ваша відповідь дійсна лише для API> 11
Shine


0

Можливо, вам також доведеться додати нижнє поле до вашої кнопки, щоб побачити ефект тіні піднятої кнопки:

<item name="android:layout_marginBottom">@dimen/activity_vertical_margin</item>
<item name="android:elevation">1dp</item>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.