- Русские Блоги
- Простое использование Android Tint
- Простое использование Android Tint
- В чем разница между атрибутами background, backgroundTint, backgroundTintMode в XML-макете Android?
- 5 ответов
- ФЭФБДЭ как оттенок
- 37AEE4 в качестве фона
- Как настроить оттенок для просмотра изображений программно в android?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Темы и стили в Android-приложениях
- О чем пойдет речь:
- Начнем с основ
- Стиль
- Атрибут
- Наследование тем и стилей
- ThemeOverlay
- Последовательность применения тем и стилей ко View-компоненту
- Да прибудет с нами Material Components
- Перейдем к практике
- Что там по темной теме?
- А если мы хотим все делать самостоятельно?
- 9. Тема, стиль или… ?
- 10. Использовать TextAppearance
- Заключение
Русские Блоги
Простое использование Android Tint
Простое использование Android Tint
Если вы хотите добиться эффекта изображения ниже, первое, что приходит на ум, — это позволить пользовательскому интерфейсу вырезать изображение, во второй раз вы будете убиты пользовательским интерфейсом, а в третий раз, как вы думаете, вы будете измучены именованием.
! [Снимок экрана 13.10.2016, 21:58:26] (http://odsdowehg.bkt.clouddn.com/Снимок экрана 13.10.2016 9.58.26.png)
Итак, как этого добиться быстро и эффективно? Фактически, Android уже подумал об этом за нас, и это Android Tint. Оттенок означает шейдер, то есть раскрашивание картинки. Преимущество этого заключается в том, что вам не нужно создавать еще одно изображение. Изображение является самым большим в пакете APK. Использование Tint может значительно уменьшить размер пакета.
Изображение выше предназначено только для отображения ImageView в GridView, случайным образом генерируя цвета для исходного изображения. ic_android_black_24dp Только раскраска, картинки ресурсов скачиваются сAndroid Meterial Icons。
Здесь мы используем support-v4 В пакете DrawableCompat Для достижения раскраски основной код выглядит следующим образом:
Примечание 1: Если вы используете встроенный проект ic_launcher.png Использование шейдеров приведет к исчезновению некоторых деталей, конкретная причина неизвестна и оставлена для исследования.
Заметка 2: Необходимо изучить сценарии применения свойства adjustBounds ImageView.
Если вы хотите нажать на изображение или выбрать эффект, вы также можете использовать оттенок для достижения. Нужно только определить selector.xml
Конкретный эффект щелчка здесь не показан, вы можете попробовать.
Источник
В чем разница между атрибутами background, backgroundTint, backgroundTintMode в XML-макете Android?
При работе с XML-макетом android я наткнулся на атрибут backgroundTint . Я не понимаю для чего.
И что такое backgroundTintMode ??
5 ответов
Я тестировал различные комбинации android:background , android:backgroundTint и android:backgroundTintMode .
android:backgroundTint применяет цветной фильтр к ресурсу android:background при использовании вместе с android:backgroundTintMode .
Вот код, если вы хотите продолжить эксперименты:
Режим наложения, используемый для применения оттенка фона.
Оттенок для фона. Должно быть значение цвета в форме #rgb , #argb , #rrggbb или #aarrggbb .
Это также может быть ссылка на ресурс (в форме «@ [package:] type: name») или атрибут темы (в форме «? [Package:] [type:] name»), содержащий значение этого типа. .
BackgroundTint работает как цветной фильтр.
ФЭФБДЭ как оттенок
37AEE4 в качестве фона
Попробуйте увидеть разницу по оттенку / фону комментария и проверьте результат, когда оба установлены.
Я не буду особо подчеркивать разницу, поскольку она уже описана, но обратите внимание на следующее:
- android:backgroundTint android:backgroundTintMode доступны только в API 21
- Если у вас есть виджет с рисунком в формате png / вектор, установленным с помощью android:background , и вы хотите изменить его цвет по умолчанию, то вы можете использовать android:backgroundTint , чтобы добавить к нему оттенок.
пример
Другой пример
Если вы попытаетесь изменить цвет акцента FloatingActionButton с помощью android:background , вы не заметите изменения, потому что он уже использует app:srcCompat , поэтому для этого вы можете использовать android:backgroundTint вместо
Атрибут backgroundTint поможет вам добавить оттенок (оттенок) к фону. Вы можете указать значение цвета для того же самого в виде — «#rgb», «#argb», «#rrggbb», or «#aarrggbb».
С другой стороны, backgroundTintMode поможет вам применить фоновый оттенок. Он должен иметь постоянные значения, такие как src_over, src_in, src_atop, и т. Д.
Обратитесь к this, чтобы получить четкое представление о постоянные значения, которые можно использовать. Найдите атрибут backgroundTint , и будет доступно описание вместе с различными атрибутами.
Источник
Как настроить оттенок для просмотра изображений программно в android?
Нужно установить оттенок для представления изображения. Я использую его следующим образом:
Но это не меняется.
ОТВЕТЫ
Ответ 1
Вы можете легко изменить оттенок в коде с помощью:
imageView.setColorFilter(Color.argb(255, 255, 255, 255)); // Белый оттенок
Если вы хотите цветовой оттенок, то
Для векторного Drawable
ОБНОВЛЕНИЕ:
У @ADev есть более новое решение в его ответе здесь, но его решение требует более новой библиотеки поддержки — 25.4.0 или выше.
Ответ 2
Большинство ответов относятся к использованию setColorFilter , который не был изначально задан.
Пользователь @Tad имеет его ответ в правильном направлении, но он работает только с API 21 +.
Чтобы установить оттенок во всех версиях Android, используйте ImageViewCompat :
Обратите внимание, что yourTint в этом случае должен быть «color int». Если у вас есть ресурс цвета, например R.color.blue , сначала нужно сначала загрузить цвет int:
Ответ 3
Это сработало для меня
Ответ 4
@Хардик прав. Другая ошибка в вашем коде — это когда вы ссылаетесь на свой цвет, определенный XML. Вы передали только id методу setColorFilter , когда вы должны использовать идентификатор, чтобы найти ресурс цвета, и передать ресурс методу setColorFilter . Переписывая исходный код ниже.
Если эта строка находится в пределах вашей активности:
Кроме того, вам необходимо указать ваше основное действие:
Обратите внимание, что это также относится к другим типам ресурсов, таким как целые числа, bools, измерения и т.д. За исключением строки, для которой вы можете напрямую использовать getString() в своей деятельности без необходимости сначала звонить getResources() (не спрашивайте меня, почему).
В противном случае ваш код выглядит хорошо. (Хотя я не исследовал метод setColorFilter слишком много. )
Ответ 5
После того, как я пробовал все методы, и они не работали для меня.
Я получаю решение с помощью другого PortDuff.MODE.
Ответ 6
Начиная с леденец, есть также Оттенок метод BitmapDrawables, который работает с новым классом Palette:
public void setTintList (оттенок ColorStateList)
public void setTintMode (PorterDuff.Mode tintMode)
В старых версиях Android теперь вы можете использовать библиотеку DrawableCompat
Ответ 7
Попробуй это. Он должен работать на всех версиях Android, поддерживаемых библиотекой поддержки:
Вы можете использовать любой из вышеперечисленных функций, чтобы заставить его работать.
Вы можете прочитать о более интересных особенностей DrawableCompat на документы, здесь.
Ответ 8
Простая и одна строка
Ответ 9
Начиная с Lollipop существует метод, называемый ImageView#setImageTintList() который вы можете использовать. Преимущество состоит в том, что для него требуется ColorStateList а не только один цвет, что делает отображение ColorStateList в соответствии с цветом.
На устройствах с предустановленной Lollipop вы можете получить такое же поведение, показывая выделение, а затем установите его как графическое изображение ImageView :
Ответ 10
Ответ 11
Поскольку первый ответ не сработал у меня:
Это похоже, похоже, работает в API 21+, но для меня это не проблема. Вы можете использовать ImageViewCompat для решения этой проблемы, tho.
Надеюсь, я помог кому-нибудь: -)
Ответ 12
Если ваш цвет имеет прозрачность шестнадцатеричного цвета, используйте приведенный ниже код.
Чтобы очистить оттенок
Ответ 13
Я обнаружил, что мы можем использовать селектор цвета для оттенка attr:
Ответ 14
Не используйте PoterDuff.Mode , используйте setColorFilter() он работает для всех.
Ответ 15
Как сказал @milosmns, вы должны использовать imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);
Для этого API требуется значение цвета вместо идентификатора ресурса цвета. Это основная причина, почему ваш оператор не работает.
Ответ 16
Я опаздываю на вечеринку, но я не видел своего решения выше. Мы также можем установить оттенок цвета с помощью setImageResource() (мой minSdkVersion равен 24).
Итак, во-первых, вам нужно создать селектор и сохранить его в папке ресурсов /drawable (я называю это ic_color_white_green_search.xml )
Затем установите его в коде так:
Ответ 17
Добавление к ADev ответа (что на мой взгляд является наиболее правильным), начиная с широкого распространения Kotlin, и его полезных функций расширения:
Я думаю, что эта функция может быть полезна в любом проекте Android!
Ответ 18
Для установки оттенка для просмотра изображений программно в Android
У меня есть два метода для Android:
Я надеюсь, что я помог никому 🙂
Ответ 19
Лучшая упрощенная функция расширения благодаря ADev
Использование:-
Ответ 20
Если вы хотите установить селектор на ваш оттенок:
Ответ 21
Просто добавьте, если вы хотите удалить существующий оттенок, вы можете установить его в прозрачный цвет:
Ответ 22
Неточный ответ, но более простая альтернатива:
- Поместите другой вид поверх изображения
- Измените значение альфа, но вы хотите (программно) получить желаемый эффект.
Источник
Темы и стили в Android-приложениях
Каждому Android-разработчику так или иначе приходилось работать со стилями. Кто-то чувствует себя с ними уверенно, у кого-то есть только поверхностные знания, которые зачастую не позволяют самостоятельно решить поставленную задачу.
В преддверии выхода темной темы было решено освежить в памяти всю информацию, касающуюся тем и стилей в Android-приложениях.
О чем пойдет речь:
Начнем с основ
По своей структуре темы и стили имеют общее строение:
Для создания используется тег style . У каждого cтиля есть имя и он хранит в себе параметры key-value .
Все достаточно просто. Но в чем же разница между темой и стилем?
Единственное отличие заключается в том, как мы их используем.
Тема — это набор параметров, которые применяются ко всему приложению, Activity или View-компоненту. Она содержит базовые цвета приложения, стили для отрисовки всех компонентов приложения и различные настройки.
В теме переопределены основные цвета приложения ( colorPrimary , colorSecondary ), стиль для текста ( textAppearanceHeadline1 ) и некоторых стандартных компонентов приложения, а также параметр для прозрачного статус-бара.
Для того чтобы стиль стал настоящей темой, необходимо отнаследоваться (о наследовании мы поговорим чуть позже) от дефолтной реализации темы.
Стиль
Стиль — это набор параметров для стилизации одного View-компонента.
Атрибут
Атрибутом принято называть ключ стиля или темы. Это маленькие кирпичики из которых все строится:
Все эти ключи являются стандартными атрибутами.
Мы можем создавать свои атрибуты:
Атрибут myFavoriteColor будет указывать на цвет или ссылку на ресурс цвета.
В формате мы можем указать вполне стандартные значения:
По своей природе атрибут является интерфейсом. Его необходимо реализовать в теме:
Теперь мы можем на него ссылаться. Общая структура обращения выглядит так:
Ну и, наконец, давайте поменяем, например, цвет текста у поля:
Благодаря атрибутам мы можем добавлять какие-угодно абстракции, которые будут изменяться внутри темы.
Наследование тем и стилей
Как и в ООП, мы можем перенимать функционал существующей реализации. Сделать это можно двумя способами:
При явном наследовании мы указываем родителя с помощью ключевого слова parent :
При неявном наследовании мы используем dot-notation для указания родителя:
Никакой разницы в работе этих подходов нет.
Очень часто мы можем встретить подобные стили:
Может показаться, что стиль создан путем двойного наследования. На самом деле это не так. Множественное наследование запрещено. В таком определении явное наследование всегда выигрывает.
То есть будет создан стиль с именем Widget.MyApp.Snackbar , который является наследником Widget.MaterialComponents.Snackbar .
ThemeOverlay
ThemeOverlay — это специальные «легковесные» темы, которые позволяют переопределить атрибуты основной темы для View-компонента.
За примером далеко ходить не будем, а возьмем кейс из нашего приложения. Дизайнеры решили, что нам нужно сделать стандартное поле для ввода логина, которое будет иметь отличный от основного стиля цвет.
С основной темой поле ввода выглядит так:
Выглядит отлично, но дизайнеры настаивают на том, чтобы поле было в коричневом стиле.
Окей, как мы можем решить такую задачу?
Да, мы можем переопределить стиль и вручную поменять основные цвета вьюшки, но для этого нужно будет писать много кода, да и есть шанс, что мы про что-нибудь забудем.
Написать свою вьюшку по гайдлайнам и с кастомными параметрами?
Хороший вариант, так мы сможем удовлетворить любые хотелки дизайнеров и заодно прокачать скилл, но все это трудозатратно и может привести к нежелательным багам.
Переопределить основной цвет в теме?
Мы выяснили, что для нужного нам вида достаточно поменять colorPrimary в теме. Рабочий вариант, но так мы затронем внешний вид остальных компонентов, а нам это не нужно.
Правильное решение — это использовать ThemeOverlay.
Создаем ThemeOverlay и переопределяем основной цвет темы:
Далее указываем его с помощью специального тега android:theme в наш TextInputLayout :
Все работает так, как нам и нужно.
Конечно же возникает вопрос — как это работает под капотом?
Эту магию позволяет провернуть ContextThemeWrapper . При создании View в LayoutInflater будет создан контекст, где за основу будет взята текущая тема и в ней будут переопределены параметры, которые мы указали в нашей Overlay теме.
Аналогичным образом мы можем самостоятельно переопределить любой параметр темы в приложении.
Последовательность применения тем и стилей ко View-компоненту
Главный приоритет имеет файл разметки. Если в нем определен параметр, то далее все аналогичные параметры будут игнорироваться.
Следующий приоритет имеет стиль View:
Далее используются предопределенные стили для компонента:
Если параметры не были найдены, то используются атрибуты темы:
В общем-то это все, что нужно знать для того чтобы начать работу с темами. Теперь кратко посмотрим на обновленную дизайн-библиотеку Material Components.
Да прибудет с нами Material Components
Material Сomponents была представлена на Google I/O 2018 и является заменой Design Support Library.
Библиотека дает нам возможность использовать обновленные компоненты из Material Design 2.0. Кроме того, в ней появилось множество интересных настроек по кастомизации. Все это позволяет писать яркие и уникальные приложения.
Вот некоторые примеры приложений в новом стиле: Owl, Reply, Crane.
Перейдем к практике
Для создания темы нужно отнаследоваться от базовой темы:
Все они очень похожи на AppCompat темы, но имеют дополнительные атрибуты и настройки.
Подробнее с новыми атрибутами можно познакомиться на material.io.
Если по каким-то причинам вы сейчас не можете переключиться на новую тему, то вам подойдут Bridge темы. Они наследуются от AppCompat тем и имеют все новые атрибуты Material Components. Нужно всего лишь добавить постфикс Bridge и использовать все возможности без опасений:
А вот и наша тема:
Важно понимать, что когда вы переопределяете стиль в теме, он применится ко всем View этого типа в приложении (Activity).
Если же вы хотите применить стиль только к одной конкретной View, то нужно использовать тег style в файле с разметкой:
Одно из нововведений, которое меня действительно впечатлило — это ShapeAppearance. Оно позволяет изменять форму компонентов прямо в теме!
Каждый View-компонент относится к определенной группе:
shapeAppearanceSmallComponent
shapeAppearanceMediumComponent
shapeAppearanceLargeComponent
Как мы можем понять из названия, в группах вьюшки разных размеров.
Проверим на практике:
Мы создали Widget.MyApp.SmallShapeAppearance для «маленьких» компонентов. Закруглили верхний левый угол на 20dp и правый нижний угол срезали на 15dp .
Получили такой результат:
Выглядит интересно. Будет ли это работать в реальной жизни? Время покажет.
Как и для стилей, мы можем применить ShapeAppearance только для одного View-компонента.
Что там по темной теме?
Совсем скоро состоится релиз Android Q, а вместе с ним к нам придет и официальная темная тема.
Пожалуй, одна из самых интересных и эффектных возможностей новой версии Android — это автоматическое применение темной темы для всего приложения одной строчкой кода.
Звучит здорово, давайте пробовать. Предлагаю взять всеми любимый гитлаб клиент от terrakok.
Разрешаем перекрашивать приложение (по умолчанию запрещено):
Атрибут android:forceDarkAllowed доступен с API 29 (Android Q).
Запускаем, смотрим что получилось:
Согласитесь, что для одной строчки кода выглядит очень круто.
Конечно, есть проблемы — BottomNavigationBar сливается с фоном, лоадер остался белым, выделение кода страдает и, вроде бы, все, по крайне мере мне больше ничего серьезного в глаза не бросилось.
Уверен, что потратив не так много времени, можно решить основные проблемы. Например, отключив автоматический темный режим для отдельных вьюшек (да, так тоже можно — android:forceDarkAllowed доступен для View в файле-разметке).
Следует помнить, что данный режим доступен только для светлых тем, если вы используете темную, то принудительная темная тема работать не будет.
Рекомендации по работе можно почитать в документации и на material.io.
А если мы хотим все делать самостоятельно?
Как бы не было просто использовать принудительную темную тему, этот режим лишен гибкости. Фактически, все работает по заранее определенным правилам, которые могут не устраивать нас и, что более важно, заказчика. Думаю, что такое решение можно рассматривать как временное, до тех пор пока мы не сделаем свою реализацию темной темы.
В API 8 (Froyo) был добавлен квалификатор -night , который и по сей день используется для применения темной темы. Он позволяет автоматически применять нужную тему в зависимости от времени суток.
В темах DayNight уже используется такая реализация, нам достаточно отнаследоваться от них.
Давайте попробуем написать свою:
Нам теперь на каждую версию API делать тему со всеми параметрами? Нет, конечно! Мы сделаем базовую тему, где будут определены базовые атрибуты, доступные для всех версий API и отнаследуемся от нее в нужной версии API:
9. Тема, стиль или… ?
При созданий собственных тем и стилей будет здорово, если вы укажите префикс, говорящий о том что это за стиль и для чего он определен. Такое именование позволит очень просто структурировать и расширять стили.
10. Использовать TextAppearance
Хорошим тоном будет расширить основные стили для текста и везде их использовать.
Много полезной информации можно найти на сайте Material Design: Typography, Typography Theming.
Заключение
В заключение хочется сказать, что стилизация приложения — это обязанность не только разработчиков, но и дизайнеров. Только благодаря тесному взаимодействию мы сможем получить по-настоящему хороший и красивый продукт. Дизайнеры должны иметь представления о платформе и возможностях Material Components. Ведь именно на их плечи ложится ответственность по поддержке визуальной составляющей приложения. Дизайнерам доступен специальный плагин для Sketch — Material Theme Editor. В нем очень просто выбирать цвета для приложения и строить экраны на основе стандартных компонентов. Если ваши дизайнеры еще не знают о нем, то обязательно расскажите им.
Начать изучать Material Components можно с репозитория на GitHub — Modular and customizable Material Design UI components for Android. В нем собрано очень много информации по стандартным стилям и их возможностям. Кроме того, там есть приложение — sample, чтобы все сразу попробовать на практике.
Источник