- Стили
- Панель навигации
- Строка состояния
- Кнопки
- Выбираемый элемент в Android 5.0 (API 21)
- Значок гамбургера в DrawerLayout
- Тайны кнопок в Android. Часть 2: Рефакторинг верстки
- Стили кнопок Android Material Design
- 12 ответов
- Как изменить цвет
- Самое простое решение
- Шаг 1. Используйте последнюю версию библиотеки поддержки
- Шаг 2. Используйте AppCompatActivity в качестве родительского класса Activity
- Шаг 3. Используйте пространство имен приложения в XML-файле макета
- Шаг 4. Используйте AppCompatButton вместо Button
Стили
Панель навигации
Делаем панель навигации прозрачной (API 19+)
По умолчанию панель навигации с кнопками «Назад», «Домой» и «Недавние программы» имеет чёрный цвет. Переопределяем (API 21+).
Строка состояния
Можно поменять на Android 5 (Lollipop).
Позже (API 21+) можно уже не указывать targetApi.
Делаем строку состояния прозрачной (API 19+).
Меняем цвет строку состояния на белый (API 23+).
Программный способ (API 21++).
Переопределяем внешний вид стандартного значка меню в виде трёх точек по вертикальной линии.
Читатели сообщили, что код может не работать и дали ссылку на работающий вариант:
Кнопки
Обычная кнопка по умолчанию использует стиль buttonStyle, который можно не указывать.
На панели Palette можно увидеть кнопку меньшего размера Small Button, который на экране будет выглядеть чуть меньше стандартной кнопки с уменьшенным шрифтом. Разница заключается в стиле buttonStyleSmall.
Также возможны другие стили. Например, кнопка без окантовки (плоская кнопка) — стиль borderlessButtonStyle. Она покажет свои границы в момент нажатия.
Переопределяем через собственные стили и подключаем через android:theme.
Ещё один стиль, попадавший мне в примерах — buttonStyleInset.
Можно применить стиль Material Design:
У кнопки ToggleButton есть свой стиль buttonStyleToggle:
В Material Design буквы в кнопках и метках выводятся в верхнем регистре. Можно отменить это правило, если добавить строку в используемой теме.
Или более тонкая настройка для кнопки.
Выбираемый элемент в Android 5.0 (API 21)
У компонентов в стиле Material Design при нажатии появляется анимация в виде расходящего круга (ripple). Стиль selectableItemBackgroundBorderless применим к различным компонентам: кнопки, рамки и т.д. Применим к ImageView. В первом случае анимация не распространяется за пределы своего компонента. Во втором случае анимация выходит за пределы границ компонента.
Стоит отметить, что существует упрощённый стиль selectableItemBackground, доступный для старых устройств. В этом случае анимация уже не виде круга, а в более простом варианте. Для первой кнопки в виде прямоугольника внутри своего контейнера. Во втором случае анимация также не выходит за границы своего контейнера.
Значок гамбургера в DrawerLayout
Можно поменять цвет значка гамбургера. Откроем файл стилей res/values/styles.xml и добавим:
Элемент spinBars со значением true позволяет использовать анимацию. В противном случае значок будет статичным.
Источник
Тайны кнопок в Android. Часть 2: Рефакторинг верстки
Приветствую, уважаемое сообщество.
В предыдущей статье мы, используя только верстку, сделали кнопку “включить/выключить”, и вот что у нас тогда получилось:
XML-код получился довольно увесистый. В этой статье я покажу, как сделать его по-настоящему красивым. Мы сократим код вдвое, убрав все, что может затруднить сопровождение нашего приложения или вызвать недовольство тим-лида. В этой статье мы будем использовать строковые ресурсы ( strings.xml ), ресурсы размерностей ( dimens.xml ), стили и темы ( styles.xml ). Если вы не знакомы с первой частью статьи, рекомендую хотя бы пробежать ее глазами.
Выглядит наша кнопка вот так:
Справа изображены кнопки в нажатом состоянии, то есть пока мы удерживаем их пальцем. Слева — не нажатые, в режиме Включено и Выключено.
Текстовые ресурсы strings.xml
Займемся рефакторингом кода. Там точно есть недостатки, например слово Телефония . Чтобы приложение можно было перевести на несколько языков, все текстовые константы должны быть собраны в файле strings.xml . Он уже создан и находится в каталоге res/values . Откроем его и заменим его содержимое на следующее:
Так мы объявили текстовую константу act_main_telephony . Теперь заменим текст кнопки android:textOn и android:textOff на ссылку @string/act_main_telephony :
Немного лучше, хотя объем кода от этого только вырос, но это плата за возможность удобной локализации приложения. Как именно его можно локализовать? Наш файл strings.xml размещен в каталоге res/values . Сейчас мы пишем в него русскоязычный текст. Допустим, мы хотим поддерживать еще и английский язык. Для этого мы создаем каталог res/values-en , и в нем создаем еще один файл strings.xml . Он должен содержать все те же константы, что и первый файл, но уже на английском. При запуске приложения Android ищет в приложении в первую очередь ту локаль, которая установлена у пользователя в системе по умолчанию. Если в приложении нет ресурсов для этой локали, то Android берет ресурсы из локали по умолчанию, то есть из каталога res/values без суффиксов. Там может быть текст на любом языке, не обязательно русском или английском. Этот ресурс будет использован, если пользователю не подходит любой другой имеющийся в приложении ресурс. Локализовать можно не только ресурсы values , но и любые другие, например часто локализуют drawable , если какой-то текст задан картинкой. Если вас интересуют подробности, рекомендую почитать интересную статью о локализации приложений от Google и о том, как Android выбирает наиболее подходящий ресурс. Если будет время, я постараюсь подготовить отдельную статью о локализации с примерами, так как этот вопрос достаточно обширный.
Стили и темы: styles.xml
Что делать, если нам нужно десять таких кнопок, отличающихся только надписью и левой иконкой? Копировать все? Тогда размер файла макета будет непомерно большой и содержать 80% повторяющегося кода. Здесь нам на помощь приходят стили. Давайте вынесем в стили все, что только может повторяться. К счастью, плагин ADT для Eclipse несколько облегчает процесс, если вы не очень знакомы с разработкой файлов стиля Android.
Для извлечения стиля откроем наш макет activity_main.xml в режиме Graphical Layout и выделим кнопку. Щелкнем на ней правой кнопкой мыши и выберем пункт Extract Style :
Укажем имя стиля: styleOnOffButton и оставим отмеченными все атрибуты, кроме android:drawableLeft , android:textOn и android:textOff , которые будут отличаться у каждой кнопки в нашем приложении. Остальные атрибуты будут вынесены в стиль:
Нажмите ОК. Полученный стиль можно увидеть в файле res/values/styles.xml :
А текст кнопки сильно уменьшился:
Теперь, чтобы сделать десять кнопок, нужно писать куда меньше текста, и минимум дублирования кода. Обратите внимание: атрибуты android:layout_width и android:layout_height в стиль не выносятся. Они обязательно должны присутствовать у каждого элемента в файле макета. Атрибут android:id , конечно же, свой у каждого объекта, поэтому тоже не выносится в стиль. Тем не менее, полученный код достаточно компактен, чтобы его было удобно переиспользовать.
Если вы сейчас запустите приложение, то увидите, что все “поплыло”, и результат совсем не тот, что мы ожидали. Почему? Потому что стиль хоть и создался, но к кнопке не применился.
Применить стиль к кнопке, можно, указав ей атрибут style=»@style/styleOnOffButton» . Это было бы сделано автоматически, если бы мы включили опцию Set style attribute on extracted elements при извлечении стиля. Оба пути сработают, но это не лучшие варианты, так как эту строку нужно будет прописывать каждому экземпляру кнопки в каждом окне. Хотелось бы этого избежать. Как правило, в приложениях используется один стиль для одинаковых элементов управления, это одно из базовых правило дизайна. То ессть все кнопки типа включить/выключить выглядят одинаково, отличаясь только иконками и текстом. Редко кто делает одну прямоугольную, другую кругленькую, а третью ромбиком.
Это дает нам возможность прописать стиль в теме. Откройте файл styles.xml и найдите там следующий текст:
Это тема нашего приложения. Давайте укажем, что все кнопки ToggleButton должны иметь один и тот же стиль, наш стиль:
Что такое android:buttonStyleToggle , что еще можно стилизовать, и где об этом почитать? Я так и не смог найти полноценную документацию по стилям. Если кто-то ее видел, пожалуйста напишите в комментариях. Поэтому я обращаюсь напрямую к исходникам Android, к счастью они открыты для всех. Я работаю с ADT, и у меня исходники стилей Android лежат здесь: adt-bundle-windows\sdk\platforms\android- \data\res\values\themes.xml . Скачиваются исходники при помощи утилиты Android SDK Manager, которая запускается прямо из Eclipse, меню Window->Android SDK Manager .
И еще одно исправление мы должны сделать. Созданный нами стиль не наследуется от стиля кнопок, а это значит, что наш элемент управления потерял способность нажиматься. Это легко проверить, если сейчас запустить приложение и попробовать нажать кнопку. Как это вылечить? Нужно наследовать наш стиль от стиля android:style/Widget.Button.Toggle — это стиль всех ToggleButton по умолчанию:
Откуда я взял android:style/Widget.Button.Toggle ? Из тех же исходников Android, файл styles.xml .
Ресурсы размерностей: dimens.xml
Теперь все работает, как надо. Но мы должны сделать еще пару небольших улучшений. Как вы заметили, в стиле styleOnOffButton есть атрибут android:textSize , который задан константой 24sp . Если в нашем приложении будет еще какой-то текст, кроме кнопок, вероятно мы захотим его сделать таким же по размеру для сохранения общего стиля. А это значит, что константу 24sp мы будем еще не раз использовать в разных местах. И если мы потом захотим поэкспериментировать с размером текста, то нам придется менять эти константы по всему приложению. Чтобы этого избежать, давайте объявим именованную константу размера. Откроем файл res/values/dimens.xml и заменим все его содержимое следующим:
Как видите, кроме text_size здесь есть еще одна константа — activity_padding . Если вспомнить код нашего макета, то там мы увидим константу android:padding=»6dp» в теге RelativeLayout . А так как отступы от границ экрана у всех окон приложения также логично делать одинаковыми, это значение само-собой напрашивается в константы.
Теперь заменим константу 24sp в стиле на новый ресурс @dimen/text_size :
И текст тега RelativeLayout в файле activity_main.xml с константой в ресурсах:
И еще немного о стилях
Давайте еще раз подумаем о стилях. Мы сделали одинаковый стиль для всех ToggleButton , так почему бы не сделать стиль для всех окон? Тем более, что кроме отступов от границ у всех окон будет общий цвет фона. Такой стиль будет простой, нам не нужно его ни от чего наследовать, давайте пропишем его вручную. Откроем файл styles.xml и добавим в конец перед закрывающим тегом следующий код:
Вот еще один способ задавать цвет — в файле ресурсов с помощью тега color .
Не каждый RelativeLayout — главный элемент Activity, поэтому мы не можем прописать стиль всем RelativeLayout , как мы поступили с ToggleButton . В этом случае стиль нужно указывать явно в тех элементах, где это нужно, используя атрибут style . Давайте пропишем стиль нашему макету и посмотрим, что в и тоге у нас получилось:
Все атрибуты окон у нас в стилях. Для каждой новой Activity достаточно указать стиль style=»@style/styleActivity» ее корневому элементу, и окно будет выглядеть так же, как и другие окна приложения.
Заключение
Сравните исходный вариант макета с оптимизированным. Вот, что у нас было:
И вот, что получилось:
Правда стало красивее? Все общие атрибуты кнопок и окон в стилях. Создавая новые кнопки, мы будем прописывать им только те атрибуты, которые отличают новую кнопку от других: иконка, название, идентификатор, расположение в родительском элементе.
Все числовые константы спрятаны в файле dimens.xml , никакого копипаста одних и тех же констант у нас не будет. Все строковые константы — в файле strings.xml . Для локализации приложения под другие языки достаточно перевести только этот файл.
Разница между исходным и оптимизированным вариантом заметна даже на одном элементе окна. В реальных приложениях их в окне десятки, а потому оптимизированный код будет на порядок проще читать и сопровождать. Мое самое большое приложение iPUMB — ПУМБ online содержит около 40 activity. Если бы не стили, мне пришлось бы копировать оформление окон по 40 раз, и если дизайнеры придумают что-то новое, мне пришлось бы 40 раз этот код менять.
Еще одна прелесть стилей — это унификация кода при командной разработке. Один раз написанный файл стиля дал всем членам нашей команды разработчиков готовый инструмент для верстки окон, и все наши окна выглядели, как единое целое, и без каких-либо рефакторингов и «подгонок».
Буду рад, если эта статья оказалась вам полезна. В следующих статьях я обязательно поделюсь другими тонкостями верстки в Android.
Источник
Стили кнопок Android Material Design
Меня смущают стили кнопок для материального дизайна. Я хотел бы получить красочные выпуклые кнопки, как в прилагаемой ссылке, например, кнопки «принудительно остановить» и «удалить» в разделе использования. Есть ли доступные стили или мне нужно их определить?
Я не смог найти стили кнопок по умолчанию.
Если я попытаюсь изменить цвет фона кнопки, добавив
Исчезнут все стили, такие как сенсорная анимация, тень, закругленный угол и т. д.
12 ответов
Я добавлю свой ответ, поскольку я не использую другие предоставленные ответы.
В библиотеке поддержки v7 все стили фактически уже определены и готовы к использованию, для стандартных кнопок доступны все эти стили:
Чтобы ответить на вопрос, следует использовать стиль
Как изменить цвет
Для всего приложения:
Цвет всех элементов управления пользовательского интерфейса (не только кнопок, но также кнопок с плавающими действиями, флажков и т. Д.) Управляется атрибутом colorAccent , как описано в здесь. Вы можете изменить этот стиль и применить свой собственный цвет в определении темы:
Для определенной кнопки:
Если вам нужно изменить стиль определенной кнопки, вы можете определить новый стиль, унаследовав один из родительских стилей, описанных выше. В приведенном ниже примере я просто изменил цвет фона и шрифта:
Затем вам просто нужно применить этот новый стиль к кнопке с помощью:
Чтобы установить дизайн кнопки по умолчанию в макете, добавьте эту строку в тему styles.xml:
Где @style/btn — тема вашей кнопки. Это устанавливает стиль кнопки для всех кнопок в макете с определенной темой.
Самое простое решение
Шаг 1. Используйте последнюю версию библиотеки поддержки
Шаг 2. Используйте AppCompatActivity в качестве родительского класса Activity
Шаг 3. Используйте пространство имен приложения в XML-файле макета
Шаг 4. Используйте AppCompatButton вместо Button
Если я вас правильно понял, вы хотите сделать что-то вроде этого:
В таком случае достаточно использовать:
Или для API меньше 21:
Анимированный вариант находится здесь.
Вы можете использовать Библиотека компонентов материала .
Добавьте зависимость к ваш build.gradle :
Чтобы изменить цвет фона , у вас есть 2 варианта.
- С помощью атрибута backgroundTint .
- На мой взгляд, это будет лучший вариант. Если вы хотите переопределить некоторые атрибуты темы из стиля по умолчанию, вы можете использовать новый атрибут materialThemeOverlay .
Для варианта №2 требуется как минимум версия 1.1.0 .
Вы можете использовать один из этих стилей:
- Кнопка с заливкой (по умолчанию) : style = «@ style / Widget.MaterialComponents.Button
- Текстовая кнопка : style = «@ style / Widget.MaterialComponents.Button.TextButton»
- OutlinedButton : style = «@ style / Widget.MaterialComponents.Button.OutlinedButton»
Старая библиотека поддержки .
С новой Библиотекой поддержки 28.0.0 Библиотека дизайна теперь содержит MaterialButton .
Вы можете добавить эту кнопку в наш файл макета с помощью:
По умолчанию этот класс будет использовать основной цвет вашей темы для заливки фона кнопок, а также белый цвет для цвета текста кнопок.
Вы можете настроить кнопку с помощью следующих атрибутов:
app: rippleColor : цвет, который будет использоваться для эффекта пульсации кнопки.
app:backgroundTint : используется для придания оттенка фону кнопки. Если вы хотите изменить цвет фона кнопки, используйте этот атрибут вместо фона.
app:strokeColor : цвет, который будет использоваться для обводки кнопки
app:strokeWidth : ширина, которая будет использоваться для обводки кнопки.
app:cornerRadius : используется для определения радиуса, используемого для углов кнопки
Вот как я получил то, что хотел.
Сначала сделал кнопку (в styles.xml ):
Рябь и фон для кнопки в виде рисованного primary_round.xml :
Это добавило эффект ряби, который я искал.
Помимо android.support.design.button.MaterialButton ( который упоминается Габриэле Мариотти ),
Существует также еще один виджет Button , который называется com.google.android.material.button.MaterialButton , который имеет разные стили и расширяется от AppCompatButton :
Закрашенная, приподнятая кнопка (по умолчанию) :
Заполненная, не поднятая Button :
Текст Button :
Значок Button :
Текст Button со значком: :
Удобный класс для создания новой кнопки материала.
Этот класс предоставляет обновленные стили материала для кнопки в конструкторе. Виджет будет отображать правильные стили материалов по умолчанию без использования флага стиля.
Вот пример, который поможет последовательно применять стиль кнопок во всем приложении.
Вот образец темы, которую я использовал с определенными стилями.
Вот как я определил форму и эффекты кнопки внутри папки res / drawable-v21 .
Углы 2dp должны соответствовать теме материала.
Я пробовал много ответов и сторонних библиотек, но ни одна из них не сохраняла границу и не увеличивала эффект на pre-lollipop, в то время как эффект пульсации на леденце без недостатков. Вот мое окончательное решение, объединяющее несколько ответов (граница / поднятая не очень хорошо отображаются на гифках из-за глубины цвета в градациях серого):
Леденец
Предварительный леденец
build.gradle
layout.xml
drawable-v21 / btn_bg.xml
drawable / btn_bg.xml
Активность onCreate
1) Вы можете создать кнопку с закругленными углами , указав xml drawable, и вы можете увеличить или уменьшить радиус, чтобы увеличить или уменьшить округлость угла кнопки. Установите этот XML-файл в качестве фона для кнопки.
2) Чтобы изменить анимацию перехода тени и тени по умолчанию между состояниями кнопки, вам необходимо определить селектор и применить его к кнопке с помощью свойства android: stateListAnimator. Полный справочник по настройке кнопок: http://www.zoftino.com/android-button
Я только что создал библиотеку для Android, которая позволяет легко изменять цвет кнопки и цвет пульсации.
Вам не нужно создавать стиль для каждой кнопки, которую вы хотите, с другим цветом, что позволяет вам настраивать цвета случайным образом.
Вы можете придать виду авиацию, добавив к нему ось z и добавив к нему тень по умолчанию. эта функция была предоставлена в предварительной версии L и будет доступна после ее выпуска. На данный момент вы можете просто добавить изображение, которое придает такой вид фону кнопки.
Источник