- ImageButton (Кнопка-изображение)
- Общая информация
- Методы
- Примеры
- Щелчок
- Продолжительное нажатие
- Делаем красивые кнопки в Android
- Добавляем кнопку на разметку
- Атрибуты кнопки
- Включение и выключение кнопки
- Кнопка с Drawable
- ImageButton
- Обработка нажатий на кнопку
- Дизайн и стили кнопок
- Настройка стилей кнопок
- Кнопка с закруглёнными углами
- Высота и тень кнопки
- Настройка анимации тени
- Простая кнопка логина
- Android — как правильно добавлять картинку на button
- 3 ответа 3
- Android: объединение текста и изображения на кнопке или ImageButton
- 14 ответов:
ImageButton (Кнопка-изображение)
Общая информация
Находится в разделе Buttons.
Компонент ImageButton представляет собой кнопку с изображением (вместо текста). По умолчанию ImageButton похож на обычную кнопку.
В режиме дизайна изображение на кнопке определяется атрибутом android:src
Можно сделать двойной щелчок, чтобы сразу установить нужное свойство.
Методы
Программно можно установить изображения через различные методы.
setImageBitmap() Используется, чтобы указать в качестве изображения существующий экземпляр класса Bitmap setImageDrawable() Используется, чтобы указать в качестве изображения существующий экземпляр класса Drawable setImageResource() Используется, чтобы указать в качестве изображения существующий идентификатор ресурса (см. пример) setImageURI() Используется, чтобы указать в качестве изображения существующий адрес типа Uri. В некоторых случаях элемент кэширует изображение и после изменения изображения по прежнему выводит старую версию. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri
Примеры
С помощью метода setImageURI() можно обратиться к ресурсу типа Drawable по его идентификатору:
Например, можно задать путь Uri:
Можно обратиться к ресурсу по его типу/имени:
В этом случае код будет следующим:
Щелчок
Как и у обычной кнопки, интерес представляет только щелчок. В нашем примере мы будем менять поочередно картинки на кнопке (нужно подготовить две картинки в папке drawable)
Теперь при каждом щелчке изображение на кнопке будет циклически переключаться между двумя картинками.
Продолжительное нажатие
Кроме обычного щелчка, в Android есть особый вид нажатия на кнопку — продолжительное нажатие. Это событие происходит, когда пользователь нажимает и удерживает кнопку в течение одной секунды. Этот тип нажатия обрабатывается независимо от обычного щелчка.
Для обработки продолжительного нажатия нужно реализовать класс View.OnLongClickListener и передать его в метод setOnLongClickListener(). Класс OnLongClickListener имеет один обязательный метод OnLongClick(). В принципе это похоже на метод OnClick(), только имеет возвращаемое значение.
Запустите проект и убедитесь, что при быстром нажатии ничего не происходит, а при более продолжительном нажатии всплывает сообщение.
Источник
Делаем красивые кнопки в 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 в случае, если здесь изображение не нужно).
Источник
Android — как правильно добавлять картинку на button
Имеется png картинка и цель — добавить её на button. Проблема в том, что если добавляю через @android:background кнопки, то картинка становится с лесенками (как будто антиалиазинг выключен), либо становится мутной. Если использую разметку ниже, то вообще картинка не показывается, остаются только границы на button.
Имеются предоположения, что неправильно добавляю png в проект. Добавляю через res->new->image asset
Исправил, теперь всё работает
Картинку перемещаю вручную в папку res/drawable-hdpi Только есть небольшая проблема, что селектор android:state_pressed=»true» всё равно отказывается работать
3 ответа 3
По описанию проблема в том, что нет ресурса с достаточным качеством картинки. Либо ресурс с соответствующим квалификатором отсутствует вовсе (например res/drawable-xxhdpi/), либо хранящееся в нем изображение имеет низкое качество — собственный размер в пикселях мал для данного разрешения или достаточный размер, но неудачный скалинг, то есть размер нормальный, но в результате обработки по увеличению получилась хрень вместо четкой картинки.
Так, для экрана плотностью XXHDPI (
480dp) изображение для стандартной иконки (размер 48x48dp) должно иметь абсолютные геометрические размеры 144×144 пикселя с содержимым соответствующего качества (подробнее смотрите офф.документацию).
В первом случае недостающие ресурсы нужно создать, во втором посмотреть, что там за изображения вообще лежат и привести их в соответствие.
PS: селектор у вас составлен неверно. В конце селектора должен быть айтем для вида по умолчанию, который не имеет никаких стейтов (в вашем случае вместо должен быть просто и располагаться самым последним в иерархии айтемов. Выбор айтема в селекторе производится по следующему алгоритму: проверяется условие стейта первого айтема, если совпадает, то он выводится и селектор заканчивает работу, иначе переходит ко второму айтем и проверяет его условие и так далее, если ни одно из условий не выполняется последним выполняется айтем без условий, который содержит, как правило, нормальный вид (состояние без всяких нажатий, фокусов, селекторов и тд).
Картинку в селекторе не видно, потому что ее закрывает shape — фигуры не прозрачные по умолчанию. Смотрите, например этот ответ (вторая часть) по созданию вида из наложения картинки и шейпа.
Источник
Android: объединение текста и изображения на кнопке или ImageButton
Я пытаюсь картинку (в качестве фона) на кнопку и динамически добавлять, в зависимости от того, что происходит во время выполнения, текст над изображением.
если я использую ImageButton У меня даже нет возможности добавить текст. Если я использую Button Я могу добавить текст, но только определить изображение с android:drawableBottom и аналогичные атрибуты XML, как определено здесь.
однако эти атрибуты объединяют только текст и изображение в X-и y-измерениях, что означает, что я могу рисовать изображение вокруг моего текста, но не ниже/под моим текстом (с осью z, определенной как выходящая из дисплея).
какие-либо предложения о том, как это сделать? Одной из идей было бы либо расширить Button или ImageButton и переопределить draw() -метод. Но с моим текущим уровнем знаний я действительно не знаю, как это сделать (2D-рендеринг). Может быть, кто-то с большим опытом знает решение или хотя бы некоторые указатели для начала?
14 ответов:
можно назвать setBackground() на Button для установки фона кнопки.
любой текст будет отображаться над фоном.
Если вы ищете что-то подобное в xml есть: android:background атрибут, который работает таким же образом.
для пользователей, которые просто хотят поставить фон, значок-изображение и текст в одном Button из разных файлов: установить на Button фон, drawableTop / Bottom/Rigth / Left и обивка атрибуты.
для более сложного расположения вы также можете использовать RelativeLayout и сделать его интерактивным.
есть гораздо лучшее решение этой проблемы.
просто нормальный Button и с помощью drawableLeft и gravity атрибуты.
таким образом, вы получите кнопку, которая отображает значок в левой части кнопки и текст в нужном месте значок посередине.
просто используйте LinearLayout и притворитесь, что это Button установка background и clickable ключ:
Изз довольно хороший трюк.. 😉
Я взял другой подход от тех, которые указаны здесь, и он работает очень хорошо, поэтому я хотел бы поделиться им.
Я использую стиль для создания пользовательской кнопки с изображением слева и текстом в центре справа. Просто следуйте 4 «простых шага» ниже:
I. создайте свои 9 патчей, используя по крайней мере 3 разных файла PNG и инструмент, который у вас есть: /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch. После этого вы должны быть:
button_normal.9.формат PNG, button_focused.9.png и button_pressed.9.png
затем загрузите или создайте значок 24×24 PNG.
сохранить все в папке drawable / на вашем проекте Android.
второй. Создать XML-файл, называемый button_selector.xml в вашем проекте в папке drawable/. Государства должны быть такими:
раздел III. Перейти к значениям/ папку и открыть или создать стили.xml-файл и создайте следующий XML код:
ButtonNormalTextWithIcon является «дочерним стилем», потому что он расширяет ButtonNormalText («родительский стиль»).
обратите внимание, что изменение drawableLeft в стиле ButtonNormalTextWithIcon, чтобы drawableRight, drawableTop или drawableBottom вы можете поместить значок в другое положение по отношению к тексту.
раздел IV. Перейдите к папке, в план/ где у вас есть свой XML для ИП и перейти на кнопку, где вы хотите применить стиль, и сделать его выглядит так:
и. вуаля! У вас есть кнопка с изображением на левой стороне.
для меня это лучший способ сделать это! потому что, делая это таким образом, вы можете управлять размером текста кнопки отдельно от значка, который вы хотите отобразить, и использовать тот же фон, который можно нарисовать для нескольких кнопок с разными значками, соблюдая принципы пользовательского интерфейса Android с использованием стилей.
вы также можете создать тему для вашего приложения и добавить «родительский стиль» в это так, что все кнопки выглядят одинаково, и применить «дочерний стиль» со значком только там, где вам это нужно.
Источник