Ответ 1
Вы сделали свою кнопку прозрачной. Первый байт - это альфа.
Попробуйте v.setBackgroundColor(0xFF00FF00);
Я пытаюсь установить цвет фона для представления (в данном случае кнопки).
Я использую этот код:
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Это приводит к исчезновению кнопки с экрана. Что я делаю неправильно, и каков правильный способ изменить цвет фона на любом представлении?
Спасибо.
Вы сделали свою кнопку прозрачной. Первый байт - это альфа.
Попробуйте v.setBackgroundColor(0xFF00FF00);
Когда вы вызываете setBackgoundColor, он перезаписывает/удаляет любой существующий фоновый ресурс, включая любые границы, углы, отступы и т.д. Что вы хотите сделать, это изменить цвет существующего фонового ресурса...
View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);
Эксперимент с PorterDuff.Mode. * для разных эффектов.
Несколько вариантов для этого...
Установить зеленый цвет фона:
v.setBackgroundColor(0x00FF00);
Установите фон в зеленый цвет с помощью Alpha:
v.setBackgroundColor(0xFF00FF00);
Установить цвет фона зеленым цветом. GREEN constant:
v.setBackgroundColor(Color.GREEN);
Установите фон в зеленый, определяя в Colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="myGreen">#00FF00</color>
<color name="myGreenWithAlpha">#FF00FF00</color>
</resources>
и используя:
v.setBackgroundResource(R.color.myGreen);
и
v.setBackgroundResource(R.color.myGreenWithAlpha);
или более длинная намотка:
v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));
и
v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
Вы можете установить шестнадцатеричный цвет для любого ресурса с помощью:
View.setBackgroundColor(Color.parseColor("#e7eecc"));
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Код не устанавливает зеленую кнопку. Вместо этого он делает кнопку полностью невидимой.
Объяснение: шестнадцатеричное значение цвета неверно. Если значение Alpha равно нулю, цвет будет невидимым.
Правильное шестнадцатеричное значение 0xFF00FF00
для полной прозрачности зеленого цвета. Любое значение альфа-диапазона между 00 и FF приведет к прозрачности.
и каков правильный способ изменения цвет фона на любом представлении?
На любом View
? То, что у вас есть, является правильным, хотя вы должны отказаться от вызова invalidate()
.
Однако некоторые Views
уже имеют фоны. A Button
, например, уже имеет фон: лицо самой кнопки. Этот фон является StateListDrawable
, который вы можете найти в android-2.1/data/res/drawable/btn_default.xml
в вашей установке Android SDK. Это, в свою очередь, относится к набору растровых изображений с девятью патчами, доступных в нескольких плотностях. Вам нужно будет клонировать и изменять все это для достижения ваших зеленых целей.
Короче говоря, вам лучше будет искать другой шаблон пользовательского интерфейса, а не пытаться изменить фон Button
.
Чтобы установить первый цвет на экране, вы также можете сделать это в соответствующем layout.xml(лучший дизайн), добавив это свойство в соответствующий View:
android:background="#FF00FF00"
попытайтесь добавить:
setBackgroundColor(Color.parseColor("#FF0000"));
Я использую API минимум 16, цель 23
Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);
WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
Вы можете просто использовать:
view.setBackgroundColor(Color.parseColor("#FFFFFF"));
Этот question говорит об изменении цвета фона в представлении. В одном из ответов человек объясняет, как изменить цвет фона во время выполнения. Очевидно, вы рассмотрите, как изменять другие объекты на экране, но это должно дать вам хороший старт, по крайней мере, позволяя вам изменить цвет фона в окне при нажатии кнопки.
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
В заявлении с Android 6 используйте ContextCompact
view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
Вы можете просто использовать:
view.setBackgroundColor(Color.rgb(0, 198, 255));
view.setBackgroundColor(R.color.primaryColor);
Добавляет цвет к предыдущему значению цвета, поэтому у меня другой цвет.
Что работает для меня:
view.setBackgroundResource(R.color.primaryColor);
Предположим, у нас есть основной цвет в values=>colors.xml
как:
<resources>
<color name="primary">#FDD835</color>
</resources>
поэтому, если мы хотим использовать наш собственный цвет в setBackgroundColor(@ColorInt int Color)
, нам просто нужна аннотация @SuppressLint("ResourceAsColor")
с конструктором/методом, который будет использоваться как:
@SuppressLint("ResourceAsColor")
public _LinearLayout(Context context) {
super(context);
// Formatting our layout : )
super.setBackgroundColor(R.color.primary);
....
}
Вы должны передать int
в аргументе.
Первый пример:
view.setBackgroundColor(-500136)
Второй пример:
int colorId = R.color.green;
view.setBackgroundResource(colorId);
Это должно работать нормально: v.setBackgroundColor(0xFF00FF00);