Android change imagebutton color

Как изменить оттенок ImageButton на фокусе / нажмите

У меня есть ImageButton в моем приложении, и мне нужно изменить оттенок изображения, когда кнопка pressed/focused . У меня есть набор ImageButton чтобы получить его src из XML-файла, который выглядит следующим образом:

Однако оттенок не применяется при нажатии или фокусировке ImageButton – изображение отображается как обычно. Цвет черный определяется как #000000 как всегда. Есть идеи?

Вы можете изменить оттенок, довольно легко в коде через:

Наконец, я нашел решение для API

Пусть это поможет кому-то не потерять 2 часа!

Я нашел способ сделать это в xml (в api 21 и по крайней мере).

Установив оттенок на растровое изображение, можно повторно использовать тот же drawable в xml, не перехватывая штрихи или подкласс ImageView или ImageButton.

После того, как селектор создан, просто примените это как src ImageView или ImageButton.

Что я делаю, это добавить пользовательскую кнопку с функцией setColorFilter.

Например, я могу использовать новую кнопку в xml.

И для ImageButton

Я заметил, что здесь есть несколько запросов для людей, желающих узнать, как это сделать в XML. На самом деле это довольно просто. Это можно сделать, используя список layer-list

Выбираемая кнопка (drawable / some_button.xml):

И это выделенный drawable (drawable / some_button_highlighted.xml)

Теперь вы можете использовать это в любом другом xml:

Надеюсь, это поможет кому-то в будущем.

Вот как я успешно это сделал, попробовав множество решений. В вашей выпадающей папке создайте селектор. Например: touch_selector.xml

В моем представлении «Изображение» в xml я установил атрибут android: tint для создаваемого выше drawable.

Весь код выглядел так:

Это все xml-решение, чтобы добавить оттенок в ImageView при нажатии или в активном режиме. Аналогичное может быть сделано для ImageButton

Читайте также:  Гет контакт как удалить теги своего номера андроид

Вы можете установить цвет (оттенок) из xml.

Установите transparent ( android:background=»@null» ) для background затем используйте tint :

    Сбросьте свой предыдущий xml-файл селектора

Вместо этого создайте файл селектора ресурсов цвета . Например: res/color/btn_tint.xml .

Обновите свой макет ImageButton tint на btn_tint.xml и ссылаясь на src обратно на ваш оригинальный drawable (в отличие от предыдущего файла селектора).

Поскольку вы определили, что селектор будет src для ImageButton Android, AFAIK просто возьмет выделение, потому что это соответствует типу src. Таким образом, оттенок не будет использоваться.

Тем не менее, у меня была аналогичная проблема: я также попытался использовать селектор, как ваш, но для android: значение оттенка ImageButton вместо android: src. Конечно, я опустил значения оттенков, которые у вас есть в вашем селекторе. Это также решит вашу проблему, потому что вы хотите использовать один и тот же шаблон для всех состояний. Любопытно, что я получаю NumberFormatException каждый раз, заявляя, что системе не удалось разобрать «res / color / tint_selector.xml» (который действительно является моим селектором) как целое. Чтобы быть конкретным, мой код выглядит следующим образом:

Это мой селектор, сохраненный в /res/color/tint_selector.xml:

И это соответствующий ImageButton:

Возможно, это немного помогает, хотя в настоящее время это не работает.

Источник

Делаем красивые кнопки в Android

Одним из важных компонентов пользовательского интерфейса в приложения является кнопка. Она используется для выполнения различных действий пользователя.

В этой статье мы приведём примеры использования и стилизации кнопки.

Добавляем кнопку на разметку

Пользовательский интерфейс приложения определён в XML-файле с разметкой. Вы можете добавить элемент Button и установить атрибуты вручную. Или вы можете, воспользовавшись инструментом дизайна, добавить Button из палитры элементов и задать атрибуты.

Атрибуты кнопки

Button является подклассом TextView и наследует атрибуты от TextView и View. Ниже приведены некоторые важные атрибуты кнопки, которые можно использовать для настройки стиля и поведения.

  • background: установка в качестве фона как цвета, так и drawable
  • onClick: установить метод, который будет запускаться при нажатии на кнопку
  • minHeight: для определения минимальной высоты кнопки
  • minWidth: для определения минимальной ширины кнопки
  • stateListAnimator: определение анимации при изменении состояния кнопки
  • focusable: для определения того, будет ли обработано нажатие клавиши
  • clickable: указать, является ли кнопка кликабельной
  • gravity: установка выравнивания текста кнопки
  • textAppearance: установить стиль текста
Читайте также:  Удобный переводчик для андроид

Включение и выключение кнопки

Вы можете использовать атрибут enabled для включения или выключения кнопки, установив его в true или false. Также это можно сделать программно, вызвав метод setEnabled(), как показано ниже:

Кнопка с Drawable

Вы можете отображать на кнопке вместе с текстом изображение, используя drawableTop, drawableRight, drawableBottom или drawableLeft, в зависимости от того, где располагать картинку, как показано на скриншоте ниже.

ImageButton

Android также предоставляет ImageButton, задачей которого является использование изображения в качестве кнопки. Чтобы установить изображение, вы можете использовать атрибут src. Вы также можете использовать разные изображения, которые будут меняться в зависимости от состояния кнопки, меняя в XML drawable selector как показано ниже.

Пример XML drawable selector

Обработка нажатий на кнопку

Клики можно обрабатывать двумя способами. Первый — это установить атрибут onClick в разметке XML. Второй — назначить кнопке слушатель в коде активности или фрагмента.

Чтобы установить атрибут onClick, сначала определите метод типа void, принимающий в качестве параметра View, в активности или фрагменте и затем используйте имя этого метода как значение для атрибута onClick, как показано ниже.

Ниже приведён код обработки нажатия с помощью слушателя.

Дизайн и стили кнопок

Вы можете применять стили и темы для изменения внешнего вида кнопок. Платформа Android предоставляет заранее определённые стили. На рисунке ниже вы можете увидеть, как отображаются кнопки с различными стилями.

Пример применения темы для кнопки.

Настройка стилей кнопок

Вы можете изменить цвета по умолчанию для стилей, применяемых к кнопке, установив атрибут colorAccent на уровне приложения и атрибут colorButtonNormal на уровне виджета для нужных цветов. Атрибут colorControlHighlight используется для установки цвета кнопки, когда она находится в нажатом состоянии.

Читайте также:  Лучший андроид для подростков

Как только вы определите собственный стиль, вы можете применить его к кнопкам с помощью атрибута theme. Ниже приведен пример пользовательской темы.

Кнопка с закруглёнными углами

Вы можете определить элемент inset, как показано ниже, чтобы создать кнопку с закруглёнными углами и сохранить файл с drawable в папке res/drawable. Вы можете увеличить или уменьшить атрибут радиуса элемента, чтобы отрегулировать радиус углов кнопки.

Затем определите стиль, задающий атрибут background для xml drawable и примените его к кнопке с помощью атрибута style.

Высота и тень кнопки

Вы можете установить атрибуты elevation и translationZ, чтобы нарисовать тень кнопки.

Настройка анимации тени

Вы можете определить различные свойства теней для разных состояний кнопки и анимировать переход путём определения селектора. Вы можете применить аниматор к кнопке, используя свойство stateListAnimator.

Обратите внимание, что stateListAnimator установлен в null в приведённом выше примере. Это было сделано для удаления аниматора по умолчанию, чтобы elevation и translationZ работали.

Чтобы настроить анимацию тени при изменении состояния кнопок, вам нужно определить селектор, как показано ниже, в папке res/animator и установить свойство stateListAnimator своей темы для определённого аниматора.

Примените следующую тему, которая использует аниматор, к кнопке с использованием атрибута style или theme.

Простая кнопка логина

Совмещая всё вышесказанное, можно создать красивую кнопку, позволяющую, например, заходить пользователям на свои аккаунты. Код разметки будет выглядеть следующим образом:

Кроме того, с помощью атрибута drawableLeft можно добавить изображение к нашей кнопке, в том числе и векторное. На старых устройствах, векторные изображения вызывают падение всего приложения, поэтому сделаем это программно в коде активности при помощи AppCompatResources:

Метод setCompoundDrawablesWithIntrinsicBounds() делает то же, что и атрибуты drawableLeft, drawableTop и так далее. В качестве параметров нужно указать, где именно будет размещаться изображение (указываем null в случае, если здесь изображение не нужно).

Источник

Оцените статью