По умолчанию (по крайней мере, у меня) кнопка ToggleButton имеет тёмно-серый цвет,
индикатор включения (полоска внизу) - почти чёрный.
При нажатии на кнопку она кратковременно подсвечивается ярко-синим, индикатор становится
ярко-синим.
При изменении свойства background меняется цвет всей кнопки, включая индикатор. И
никакой подсветки при нажатии.
Вопрос: как изменить цвет кнопки, не затрагивая индикатор, и чтоб осталась цветовая
реакция на нажатие?
Ну и, если возможно, изменить цвет индикатора..
Ответы
Ответ 1
попробуйте так
создаете файл colors.xml в папке res/values:
#ff0000#00ff00
В папке drawable, создается файл my_btn_toggle.xml:
и в xml добавляем ToggleButton в виде:
android:background="@drawable/my_btn_toggle
источник
есть вариант создать свой ToggleButton
файл activity_main.xml
файл res/drawable/toggle_selector.xml
файл res/drawable/toggle_state_on.xml
файл res/drawable/toggle_state_off.xml
результат будет примерно так
источник
Ответ 2
Слева - кнопка по умолчанию, справа - как нужно.
Можно, конечно, нарисовать свои изображения, создать собственный элемент...
Неужели нет простой возможности изменить цвет фона, не затрагивая полоску-индикатор???
Я не знаю как менять цвет с помощью css для изображения в формате svg.
Источник (изображения): http://www.flaticon.com/free-icon/home-web-page_12168#term=home&page=1&position=27
Пробовал так:
svg {fill: #008000;}
Не получилось почему-то.
Ответы
Ответ 1
Все зависит от того как вы его вставляете на страницу, а вообще если по-простому
через src=svg.svg, то можно так:
Как изменить только цвет линий(полосок) в ListView?
Ответы
Ответ 1
В файле разметки:
Свойством android:divider устанавливаем цвет разделителя:
android:divider="#RRGGBB"
Вместе с этим необходимо установить высоту разделителя свойством android:dividerHeight
(иначе разделитель не будет виден):
android:dividerHeight="4px"
Полный пример:
В коде
Используя методы ListView.setDivider, ListView.setDividerHeight и один из классов
градиента:
ColorDrawable для обычного разделителя:
list.setDivider(new ColorDrawable(0xAARRGGBB));
list.setDividerHeight(4);
(используя context.getResources().getColor(R.color.некоторый_id) можно получить цвет,
заданный в ресурсах)
GradientDrawable:
ListView list = ...
int[] colors = {0, 0xFFFF0000, 0}; // красный цвет для примера
list.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
list.setDividerHeight(4);
В обоих сначала нужно установить цвет разделителя, а затем его высоту, иначе разделитель
не будет виден.
Не могу прибиндить цветовую константу, которая находится в другой dll-ке.
"/>
Студия ругается на плохой код и не хочет ничего делать. И принимает только объект,
а стринг не хочет. Как я понял, нужен конвертер.
Есть ли стандартный, или самому писать? (если можно, пример).
Ответы
Ответ 1
Ссылки на статические свойства нужно давать не через Binding, а через x:Static:
При этом у вас, разумеется, должно быть правильно объявлено пространство имён constants,
что-то вроде
xmlns:constants="clr-namespace:Namespace.In.Assembly;assembly=Your.Assembly.Name"
Не забудьте убедиться, что ваша сборка с константами называется Your.Assembly.Name,
в ней в пространстве имён Namespace.In.Assembly находится public-класс ColorConstants,
у которого есть статическое свойство (а не поле!) Black, у которого хотя бы getter
объявлен как public.
Для случая, когда ваш x:Static обладает неправильным типом (у вас строка, а ожидается
Color), вам нужно применить конвертер. Самый простой синтаксически способ — написать
свой MarkupExtension в замену x:Static, который заодно конвертировал бы значение в
нужный тип стандартным конвертером.
Итак:
public class SmartStaticExtension : StaticExtension
{
public SmartStaticExtension(string member) : base(member)
{
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
// получим значение стандартного x:Static
object value = base.ProvideValue(serviceProvider);
// попытаемся вычислить тип, к которому надо привести
IProvideValueTarget target =
serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
if (target != null)
{
Type targetType = typeof(object);
// если целевое свойство - DependencyProperty
DependencyProperty dp = target.TargetProperty as DependencyProperty;
if (dp != null)
{
targetType = dp.PropertyType; // берём тип у него
}
else
{
// целевое свойство - обыкновенное свойство, используем рефлексию
PropertyInfo pi = target.TargetProperty as PropertyInfo;
if (pi != null)
targetType = pi.PropertyType;
}
// получаем стандартный конвертер:
TypeConverter converter = TypeDescriptor.GetConverter(targetType);
// и конвертируем
value = converter.ConvertFrom(value);
}
return value;
}
}
Имея такой конвертер, можно написать
(разумеется, пространство имён local должно указывать туда, где определён SmartStaticExtension).
Работает как со строками ("LightCyan") так и с RGB-константами ("#708090").
Нашел в коде 2 цвета,никак не могу их увидеть 0x00FFFFFF и 0x55000000 color picker
не помогает, не подскажите как их посмотреть, может быть код цвета не целиком нужно
вбивать?
Ответы
Ответ 1
0x00FFFFFF - полностью прозрачный белый цвет - вы его не увидите
0x55000000 - чуть чуть видимый серый цвет - вы увидите только затенение над тем где
этот цвет лежит
Ответ 2
Просто так это не увидеть. В данном случае нужно понимать, что такое альфаканал.
Если элемент с цветом 0x00FFFFFF наложить на другой, то элемент снизу будет "просвечиваться".
Так что цвет у верхнего элемента будет такой же, как и у нижнего.
Если элемент с цветом 0x55000000 наложить на другой, то он затемнит на треть нижележащий.
Формула складывания цвета простая - результирующий цвет = фон * (1-альфаканал) +
передний_цвет * альфаканал. альфаканал используется у накладываемого пискеля. Так как
обычно альфаканал равен 0xFF, то накладываемый пиксель закрывает собой нижний.
табличка:
0xFF = 1
0x80 = 0.5
0x55 = 0.33 (1/3).
0x00 = 0
Есть к примеру текст "10/5" и как в TextView сделать чтоб к примеру число 10 было
зеленым цветом, слэш серым, а число 5 красным
Ответы
Ответ 1
Можно избежать использования HTML при помощи такого способа:
TextView TV = (TextView)findViewById(R.id.mytextview01);
Spannable word = new SpannableString("Your message");
word.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.setText(word);
Spannable wordTwo = new SpannableString("Your new message");
wordTwo.setSpan(new ForegroundColorSpan(Color.RED), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(wordTwo);
Ответ 2
TextView поддерживает простейшие теги HTML, вроде . Использовать можно так:
textView.setText(HTML.fromHtml("10/5"));
Пишу погодное приложение.
Для подбора цветов, чтобы следовать концепции Material Design, использовал ресурс
https://www.materialpalette.com/.
Остановился на следующей цветовой схеме (см. рисунок ниже)
Сейчас решил добавить "ночную тему" (см рисунок ЕЩЕ ниже :-)
Я брал цвета "на глаз".
Существуют какие-либо гайды или ресурсы для подбора цветов для ночных тем? Как правильно
подобрать цвета для ночной темы, следуя концепции Material Design?
Заранее спасибо
Ответы
Ответ 1
Нашел любопытную статейку по первому вопросу.
Находим картинку в спокойных темных тонах
Загружаем в pictaculous
Profit
Здравствуйте. Возможно изменить цвет .png иконки белого цвета, на любой другой цвет
(к примеру, желтый) используя css?
Рассматривал решения, где вырезают иконку и подсвечивают фоном. Но это очень странное
решение для типовой задачи. Обычно такой параметр называется tintColor, но в css не
нашел подобного.
Пример картинки: https://i.stack.imgur.com/1B0hl.png
Ответы
Ответ 1
Проще начинать с уже цветного изображения, но можно и с бесцветного. В этом случае
нужно сначала задать базовый оттенок фильтром сепия.
.make-blue {
filter: hue-rotate(180deg) brightness(0.5) saturate(600%);
}
.make-yellow-with-sepia {
filter: contrast(50%) sepia(100%) hue-rotate(5deg) brightness(0.8) saturate(500%);
}
Директиву может потребоваться продублировать с префиксом -webkit-.
Ответ 2
Спасибо sanmai за подсказку. Чтобы перекрасить картинку в любой другой цвет, воспользовался
следующей схемой:
Перевел rgb в hsl (использовал скрипт http://code.stephenmorley.org/javascript/colour-handling-and-processing/)
Подставил значения в формулу
hue-rotate = h - 38;
saturate = 100 + (24.5 - s);
brightness = 100 + (l - 60.0);
Прописал в css
filter: brightness(50%) sepia(1) hue-rotate(hue-rotate)
saturate(saturate%) brightness(brightness%);
Делаем градиентами три одноцветных полукруга (как предложил @nueq).
Поворачиваем их по трём направлениям.
Добавляем background-blend-mode: multiply; (не работает в IE и Edge).
Получаем шесть разноцветных секторов. Трудность в том, чтобы подобрать правильные
ингредиенты ;) У меня получилось без оранжевого сектора.
https://codepen.io/glebkema/pen/PjPPjJ
.colors {
background:
linear-gradient( 0deg, #f0f 50%, transparent 50% ),
linear-gradient( 120deg, #ff0 50%, transparent 50% ),
linear-gradient( -120deg, #0ff 50%, transparent 50% );
background-blend-mode: multiply;
border-radius: 50%;
margin: 0 auto;
width: 300px; height: 300px;
}
Ответ 4
Если на 2 - можно градиентом:
.gradient-circle{
width: 100px;
height: 100px;
border-radius: 50%;
background: linear-gradient(to left, #aebcbf 0%,#6e7774 50%,#0a0e0a 51%,#0a0809 100%);
}
Если больше сегментов - SVG (тут рисовать самому) либо Canvas (пример библиотеки
- http://canvasjs.com/html5-javascript-pie-chart/)
Хочу например чтоб строки вида, а точнее их вывод в консоль:
print 'Hello World'
Были зеленого цвета. Это возможно? Подскажите как?
Ответы
Ответ 1
Используются ANSCII escape symbols, некоторые из них отвечают за цвета. В большинстве
терминалов Linux они поддерживаются. Можно просто погуглить на эту тему и не обязательно
скачивать colorama, хотя, наверняка, это упростит работу.
Просто проверьте и всё.
import sys
import time
import random
string = "123456789\n"
def color(text):
sys.stdout.write(u"\x1B[{0}m{1}\x1B[0m".format
(random.choice(range(31,36)+
range(90,97)),i))
sys.stdout.flush()
time.sleep(random.random()/6)
for i in string:
color(i)
Ответ 2
colorama
Cross-platform colored terminal text.
Ответ 3
https://pypi.python.org/pypi/termcolor попробуй библиотеку;)И в использовании легче
from termcolor import colored
print(colored('Hello World!', 'green')
Ответ 4
Чтобы не вводить руками ANSI коды для цветов и смены текущей позиции, blessings пакет
может быть использован:
from blessings import Terminal # $ pip install blessings
import colorama # $ pip install colorama
colorama.init() # replace ANSI escapes with Win32 calls in stdout/stderr
t = Terminal()
with t.location(0, t.height - 1): # at the bottom of the terminal
print(t.green('Hello World'))
colorama, предложенная @Ilya Pirogov, позволяет одному и тому же коду работать как
на Linux, OS X, других Unices так и Windows.
Необходимо сделать на странице двух- (а, возможно, потом и трёх-) цветные буквы,
по такому принципу:
Букв будет много и разных цветов, не хочется использовать изображения.
Пожалуйста, подскажите, возможно ли это сделать средствами CSS и HTML (ну ещё может
JavaScript как-то помочь, если первых недостаточно)?
Так?
h1 {
font-size: 72px;
width: 50px;
background: -webkit-linear-gradient(left, red 49%, blue 50%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
A
UPD: Добавил вертикальное деление. Не самое идеальное решение, может кто-то предложит
и получше.
UPD2: Оставлю и горизонтальный вариант, мало ли кому пригодится.
h1 {
font-size: 72px;
background: -webkit-linear-gradient(red 49%, blue 50%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
A
UPD3: Код для 3 цветов
h1 {
font-size: 72px;
width: 50px;
background: -webkit-linear-gradient(left, red 30%, green 30%, green 60%, blue 60%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
A
Ответ 3
Для кроссбразурной работы и без возни с абсолютно позиционированными элементами используйте SVG:
Тут в принципе несложно, просто игра с отступами градиентов.
Ответ 4
С псевдоэлементами, и дублированием текста в атрибут можно реализовать и не только
для отдельных букв.
Суть метода в том, чтобы клонировать текст в псевдоэлементы через content: attr(data-text),
сам текст сделать прозрачным и отобразить только текст из :before и :after. А дальше
остается только разнести их в разные части блока и выставить отрицательный z-index,
чтобы текст можно было нормально выделить.
p[data-text] {
position: relative;
font-size: 45px;
color: transparent;
font-weight: bold;
}
p[data-text]:before,
p[data-text]:after {
position: absolute;
content: attr(data-text);
left: 0;
bottom: 0;
color: #000;
height: 50%;
overflow: hidden;
z-index: -1;
}
p[data-text]:before {
line-height: 0;
}
p[data-text]:after {
top: 0;
color: red;
}
Каков выигрыш от использования цвета в шетнадцатиричном (HEX) формате HTML? Этот формат гораздо труднее для восприятия, чем RGB, да и канала прозрачности нет. Казалось бы, при таком раскладе можно и полностью отказаться он HEX в пользу RGBA, но HEX не только активно используется, но и имеет большую популярность. Остаётся сделать вывод, что использование цвета в этом формате является приоритетным с точки зрения оптимизации. Верно ли это предположение?
Ответ
Это почти одно и то же. Просто HEX использует представление в шестнадцатеричной системе счисления (#RRGGBB или #RGB), а rgb в десятичной, что более удобно для человеческого восприятия. Еще в rgb можно указывать значения в процентах rgb(100%,0%,0%) и указывать прозрачность rgba(255,255,255,0.5)
Я не знаю как менять цвет с помощью css для изображения в формате svg. Источник (изображения): http://www.flaticon.com/free-icon/home-web-page_12168#term=home&page=1&position=27 Пробовал так: svg {fill: #008000;}
Не получилось почему-то.
Ответ
Все зависит от того как вы его вставляете на страницу, а вообще если по-простому через src=svg.svg, то можно так:
Не могу прибиндить цветовую константу, которая находится в другой dll-ке. "/>
Студия ругается на плохой код и не хочет ничего делать. И принимает только объект, а стринг не хочет. Как я понял, нужен конвертер. Есть ли стандартный, или самому писать? (если можно, пример).
Ответ
Ссылки на статические свойства нужно давать не через Binding, а через x:Static При этом у вас, разумеется, должно быть правильно объявлено пространство имён constants, что-то вроде xmlns:constants="clr-namespace:Namespace.In.Assembly;assembly=Your.Assembly.Name"
Не забудьте убедиться, что ваша сборка с константами называется Your.Assembly.Name, в ней в пространстве имён Namespace.In.Assembly находится public-класс ColorConstants, у которого есть статическое свойство (а не поле!) Black, у которого хотя бы getter объявлен как public
Для случая, когда ваш x:Static обладает неправильным типом (у вас строка, а ожидается Color), вам нужно применить конвертер. Самый простой синтаксически способ — написать свой MarkupExtension в замену x:Static, который заодно конвертировал бы значение в нужный тип стандартным конвертером. Итак: public class SmartStaticExtension : StaticExtension
{
public SmartStaticExtension(string member) : base(member)
{
} public override object ProvideValue(IServiceProvider serviceProvider)
{
// получим значение стандартного x:Static
object value = base.ProvideValue(serviceProvider); // попытаемся вычислить тип, к которому надо привести
IProvideValueTarget target =
serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
if (target != null)
{
Type targetType = typeof(object);
// если целевое свойство - DependencyProperty
DependencyProperty dp = target.TargetProperty as DependencyProperty;
if (dp != null)
{
targetType = dp.PropertyType; // берём тип у него
}
else
{
// целевое свойство - обыкновенное свойство, используем рефлексию
PropertyInfo pi = target.TargetProperty as PropertyInfo;
if (pi != null)
targetType = pi.PropertyType;
} // получаем стандартный конвертер:
TypeConverter converter = TypeDescriptor.GetConverter(targetType);
// и конвертируем
value = converter.ConvertFrom(value);
} return value;
}
}
Имея такой конвертер, можно написать (разумеется, пространство имён local должно указывать туда, где определён SmartStaticExtension). Работает как со строками ("LightCyan") так и с RGB-константами ("#708090").
Есть к примеру текст "10/5" и как в TextView сделать чтоб к примеру число 10 было зеленым цветом, слэш серым, а число 5 красным
Ответ
Можно избежать использования HTML при помощи такого способа: TextView TV = (TextView)findViewById(R.id.mytextview01);
Spannable word = new SpannableString("Your message"); word.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.setText(word);
Spannable wordTwo = new SpannableString("Your new message"); wordTwo.setSpan(new ForegroundColorSpan(Color.RED), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(wordTwo);