- Стили
- Панель навигации
- Строка состояния
- Кнопки
- Выбираемый элемент в Android 5.0 (API 21)
- Значок гамбургера в DrawerLayout
- Button (Кнопка)
- Общая информация
- Три способа обработки событий нажатий на кнопку
- Первый способ — атрибут onClick
- Второй способ — метод setOnClickListener()
- Третий способ — интерфейс OnClickListener
- Плодитесь и размножайтесь — это про кошек, а не про кнопки
- Сделать кнопку недоступной
- Сделать кнопку плоской
- Коснись меня нежно
- Получить текст с кнопки
- Дополнительное чтение
- Библиотеки
- Стили кнопок 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 позволяет использовать анимацию. В противном случае значок будет статичным.
Источник
Button (Кнопка)
Общая информация
Кнопка — один из самых распространенных элементов управления в программировании. Наследуется от TextView и является базовым классом для класса СompoundButton. От класса CompoundButton в свою очередь наследуются такие элементы как CheckBox, ToggleButton и RadioButton. В Android для кнопки используется класс android.widget.Button. На кнопке располагается текст и на кнопку нужно нажать, чтобы получить результат. Альтернативой ей может служить компонент ImageButton (android.widget.ImageButton), у которого вместо текста используется изображение.
В студии кнопка представлена компонентом Button в разделе Widgets. Управлять размером шрифта, цветом текста и другими свойствами можно через атрибут textAppearance, который задействует системные стили. Выпадающий список данного свойства содержит огромный перечень вариантов. Также вы можете вручную задать конкретные индивидуальные настройки через отдельные свойства.
Если вы растягиваете кнопку по всей ширине экрана (android:layout_width=»match_parent»), то дополнительно рекомендую использовать атрибут android:layout_margin (или родственные ему layout_marginRight и layout_marginLeft) для создания отступов от краев экрана (веб-мастера знакомы с этими терминами).
Так как кнопка является наследником TextView, то использует многие знакомые атрибуты: textColor, textSize и др.
Три способа обработки событий нажатий на кнопку
Если вы разместили на экране кнопку и будете нажимать на неё, то ничего не произойдёт. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку.
Первый способ — атрибут onClick
Относительно новый способ, специально разработанный для Android — использовать атрибут onClick (на панели свойств отображается как On Click):
Имя для события можно выбрать произвольное, но лучше не выпендриваться. Далее нужно прописать в классе активности придуманное вами имя метода, который будет обрабатывать нажатие. Метод должен быть открытым (public) и с одним параметром, использующим объект View. Вам нужно выучить пять слов для создания метода, а сам метод поместить в класс (если вы ещё путаетесь в структуре Java-кода, то вставьте метод перед последней фигурной скобкой):
Когда пользователь нажимает на кнопку, то вызывается метод onMyButtonClick(), который в свою очередь генерирует всплывающее сообщение.
Обратите внимание, что при подобном подходе вам не придётся даже объявлять кнопку через конструкцию (Button)findViewById(R.id.button1), так как Android сама поймёт, что к чему. Данный способ применим не только к кнопке, но и к другим элементам и позволяет сократить количество строк кода.
Второй способ — метод setOnClickListener()
Более традиционный способ в Java — через метод setOnClickListener(), который прослушивает нажатия на кнопку. Так как для начинающего программиста код может показаться сложным, то рекомендуется использовать подсказки студии. Вот как это будет выглядеть. Предположим, у вас на экране уже есть кнопка button. В коде вы объявляете её обычным способом:
Следующий шаг — написание метода для нажатия. Напечатайте имя элемента и поставьте точку button. — среда разработки покажет вам список доступных выражений для продолжения кода. Вы можете вручную просмотреть и выбрать нужный вариант, а можно продолжать набирать символы, чтобы ускорить процесс. Так как с нажатиями кнопок вам часто придётся работать, то запомните название его метода (хотя бы первые несколько символов) — набрав четыре символа (seto), вы увидите один оставшийся вариант, дальше можно сразу нажать клавишу Enter, не набирая оставшиеся символы. У вас появится строка такого вида:
Курсор будет находиться внутри скобок и появится подсказка OnClickListener l. Начинайте набирать new OnClickListener. Здесь также не обязательно набирать имя полностью. Набрав слово Oncl, вы увидете нужный вариант и снова нажимайте Enter. В результате вы получите готовую заготовку для обработки нажатия кнопки:
Теперь у вас есть рабочая заготовка и сразу внутри фигурных скобок метода onClick() вы можете писать свой код. Рекомендую потренироваться и набить руку в создании заготовки. Это не так сложно, и с практикой навык закрепится автоматически.
Как вариант, можно вынести код для OnClickListener в отдельное место, это удобно, когда кнопок на экране несколько и такой подход позволит упорядочить код. Удалите предыдущий пример и начните писать код заново. Принцип такой же, немного меняется порядок. В предыдущем примере мы сразу прописали в методе setOnClickListener слушателя new OnClickListener. с методом onClick(). Можно сначала отдельно объявить отдельную переменную myButtonClickListener:
Во время набора активно используйте подсказки через Ctrl+Space. Набрали несколько символов у первого слова и нажимайте эту комбинацию, набрали после слова new несколько символов и снова нажимайте указанную комбинацию — заготовка будет создана за несколько секунд, а вы избежите возможных опечаток.
У нас есть готовая переменная, и теперь, когда вы будете набирать код button.setOnClickListener, то вместо new OnClickListener впишите готовую переменную.
Для новичка описание может показаться сумбурным и не понятным, но лучше самостоятельно проделать эти операции и понять механизм.
Третий способ — интерфейс OnClickListener
Третий способ является родственным второму способу и также является традиционным для Java. Кнопка присваивает себе обработчика с помощью метода setOnClickListener (View.OnClickListener l), т.е. подойдет любой объект с интерфейсом View.OnClickListener. Мы можем указать, что наш класс Activity будет использовать интерфейс View.OnClickListener.
Опять стираем код от предыдущего примера. Далее после слов extends Activity дописываем слова implements OnClickListener. При появлении подсказки не ошибитесь. Обычно первым идёт интерфейс для диалогов, а вторым нужный нам View.OnClickListener.
Название вашего класса будет подчёркнуто волнистой красной чертой, щёлкните слово public и дождитесь появления красной лампочки, выберите вариант Implement methods. Появится диалоговое окно с выделенным методом onClick. Выбираем его и в коде появится заготовка для нажатия кнопки.
Метод будет реализован не в отдельном объекте-обработчике, а в Activity, который и будет выступать обработчиком. В методе onCreate() присвоим обработчик кнопке. Это будет объект this, т.е. текущий объект нашей активности.
На первых порах такой способ также покажется вам сложным и непонятным. Со временем и опытом понимание обязательно придёт.
Лично я рекомендую вам использовать первый способ, как самый простой и понятный. Использование второго и третьего способа дадут вам представление, как писать обработчики для других событий, так как кнопка может иметь и другие события. Например, кроме обычного нажатия существует долгое нажатие на кнопку (long click). Один из таких примеров с методом касания я привёл в конце этой статьи.
О том, как обрабатывать щелчки кнопки я написал отдельную статью Щелчок кнопки/Счетчик ворон. Также кнопки часто будут встречаться во многих примерах на сайте. Про обработку длительный нажатий можно прочитать в статье, посвященной ImageButton.
Плодитесь и размножайтесь — это про кошек, а не про кнопки
Когда у вас одна кнопка в окне, то у вас будет один метод, две кнопки — два метода и так далее. Если у вас несколько кнопок, то не обязательно для каждой прописывать свой метод, можно обойтись и одним, а уже в самом методе разделять код по идентификатору кнопки. Если вы посмотрите на код в предыдущих примерах, то увидите, что в методе присутствует параметр View, который и позволяет определить, для какой кнопки предназначен кусок кода:
Предположим, у вас есть три кнопки:
Как видите, мы сократили количество кода. Теперь у нас один обработчик onClick(), в котором прописаны действия для трёх кнопок.
Сделать кнопку недоступной
Иногда нужно сделать кнопку недоступной и активировать её при определённых условиях. Через XML нельзя сделать кнопку недоступной (нет подходящего атрибута). Это можно сделать программно через метод setEnabled():
Как альтернативу можете рассмотреть атрибут android:clickable, который позволит кнопке не реагировать на касания, но при этом вид кнопки останется обычным.
Сделать кнопку плоской
Стандартная кнопка на экране выглядит выпуклой. Но в некоторых случаях желательно использовать плоский интерфейс. Раньше для этих целей можно было использовать TextView с обработкой щелчка. Но теперь рекомендуют использовать специальный стиль borderlessButtonStyle:
Кнопка сохранит своё привычное поведение, будет менять свой цвет при нажатии и т.д.
С появлением Material Design добавились другие стили, например, style=»@style/Widget.AppCompat.Button.Borderless», который является предпочтительным вариантом. Попробуйте также style=»@style/Widget.AppCompat.Button.Borderless.Colored»
Коснись меня нежно
Если вы внимательно понаблюдаете за поведением кнопки, то увидите, что код срабатывает в тот момент, когда вы отпускаете свою лапу, извините, палец с кнопки. Для обычных приложений это вполне нормально, а для игр на скорость такой подход может оказаться слишком медленным. В подобных случаях лучше обрабатывать ситуацию не с нажатием кнопки, а с его касанием. В Android есть соответствующий слушатель OnTouchListener():
У метода onTouch() есть параметр MotionEvent, позволяющий более тонко определять касания экрана. Если произойдет событие, когда пользователь коснулся экрана, то ему будет соответствовать константа ACTION_DOWN. Соответственно, если пользователь уберёт палец, то нужно использовать константу ACTION_UP. Таким образом, можете расценивать щелчок кнопки как комбинацию двух событий — касания и отпускания.
Получить текст с кнопки
Навеяно вопросом с форума. Задача — получить текст кнопки в методе onClick(). У метода есть параметр типа View, у которого нет метода getText(). Для этого нужно привести тип к типу Button.
Если у вас несколько кнопок привязаны к методу onClick(), то щелчок покажет текст нажатой кнопки.
Дополнительное чтение
SwipeButton — кнопка с поддержкой свайпа
Библиотеки
dmytrodanylyk/circular-progress-button — ещё один вариант кнопок с индикатором прогресса.
Источник
Стили кнопок 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 и будет доступна после ее выпуска. На данный момент вы можете просто добавить изображение, которое придает такой вид фону кнопки.
Источник