Как установить цвет фона представления

179

Я пытаюсь установить цвет фона представления (в данном случае кнопки).

Я использую этот код:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Это заставляет кнопку исчезать с экрана. Что я делаю не так, и как правильно изменить цвет фона в любом представлении?

Спасибо.

Питер vdL
источник
1
Это выглядит правильно. На самом деле, я не думаю, что вам нужно вызывать invalidate (). Когда вы говорите, что кнопка исчезает, вы имеете в виду буквально или имеете в виду, что на кнопке был текст или изображение, которое исчезало?
RickNotFred

Ответы:

281

Вы сделали свою кнопку прозрачной. Первый байт - это альфа.

Пытаться v.setBackgroundColor(0xFF00FF00);

rainhut
источник
2
Ответ EddieB ниже намного лучше, так как он удаляет любые границы и т. Д., Например, подчеркивание EditText
Molten Ice
@aroth лучше Color.Green? Если я хочу, чтобы цвет закончился с argb? ... ваш ответ устарел
поставка
2
@ Delive - Приходи еще? Color.GREEN не является устаревшим и включает в себя альфа-байт. Это значение 0xff00ff00, точно так же , как то , что предлагается в ответ, за исключением того, он также имеет преимущество , заключающееся читаемым человеком . Большинство разработчиков предпочли бы удобочитаемое решение.
aroth
145

Когда вы вызываете setBackgoundColor, он перезаписывает / удаляет любой существующий фоновый ресурс, включая любые границы, углы, отступы и т. Д. Что вы хотите сделать, это изменить цвет существующего фонового ресурса ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Поэкспериментируйте с PorterDuff.Mode. * Для получения различных эффектов.

EddieB
источник
"перезаписывает / удаляет любой существующий фоновый ресурс", не совсем.
Юша Алеауб
2
Я должен был использовать выше вместе с v.invalidate (); на следующей строке.
Хашим Ахтар
1
попытался потратить впустую время и пошел с принятым ответом, v.getBackground () дал исключение nullpointer и вылетел.
Сиддарт Г
Этот плюс PorterDuff.Mode.SRC_IN решен для меня, чтобы я не потерял свою фоновую границу.
Гильерме Карвалью
123

Несколько вариантов сделать это ...

Установить зеленый фон:

v.setBackgroundColor(0x00FF00);

Установите зеленый фон с помощью альфа :

v.setBackgroundColor(0xFF00FF00);

Установите зеленый цвет фона с константой Color.GREEN:

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));
Jorgesys
источник
getResources().getColor(...)устарел stackoverflow.com/questions/31842983/…
Младший Mayhé
5
Также есть: v.setBackgroundResource(R.color.myGreen);при использованииcolors.xml
мрачный
Удалены invalidateвызовы, как вы можете видеть, setBackground... методы уже вызывают это.
Уэстон
v.setBackgroundColor(0x00FF00);это просто их код, который, по их словам, не работает. Я также ожидал бы, что это будет прозрачно.
Уэстон
35

Вы можете установить hex-цвет для любого ресурса с помощью:

View.setBackgroundColor(Color.parseColor("#e7eecc"));
Випул Патель
источник
16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Код не устанавливает зеленую кнопку. Вместо этого она делает кнопку полностью невидимой.

Пояснение: неправильное шестнадцатеричное значение цвета. При нулевом альфа-значении цвет будет невидимым.

Правильное шестнадцатеричное значение 0xFF00FF00для полной непрозрачности зеленого цвета. Любое значение альфа между 00 и FF приведет к прозрачности.

мальте косиан
источник
12

и как правильно изменить цвет фона в любом представлении?

По любому View ? То, что у вас есть, правильно, хотя вы должны отказаться от invalidate()вызова.

Тем не менее, некоторые Viewsуже имеют опыт работы. А Button, например, уже есть фон: лицо самой кнопки. Это фон StateListDrawable, который вы можете найти android-2.1/data/res/drawable/btn_default.xmlв вашей установке Android SDK. Это, в свою очередь, относится к группе растровых изображений из девяти патчей, доступных в нескольких плотностях. Вам нужно будет клонировать и модифицировать все это для достижения ваших зеленых целей.

Короче говоря, вам лучше будет найти другой шаблон пользовательского интерфейса, чем пытаться изменить фон Button .

CommonsWare
источник
Хорошо, спасибо за объяснение о фонах кнопок. Девять патчей растровых изображений ( developer.android.com/reference/android/graphics/NinePatch.html ) были новыми для меня. Я просто хочу изменить цвет чего-либо на экране, когда я нажимаю кнопку. Кнопки находятся в TextView. Попытка изменить его цвет приводит к появлению консольных сообщений «Тайм-аут ожидания отправки DDM ... ActivityManager: Невозможно отправить блок DDM 52454151: не определен обработчик» и появляется диалоговое окно на экране «Приложение неожиданно остановилось». Думаю, мне нужно больше читать по интерфейсу. Любые намеки приветствуются. Спасибо.
Peter vdL
12

Для установки первого цвета, который будет отображаться на экране, вы также можете сделать это в соответствующем layout.xml (лучший дизайн), добавив это свойство в соответствующий View:

android:background="#FF00FF00"
Justinb
источник
Вопрос проясняет, что изменение цвета должно быть динамичным.
Питер vdL
11

попробуйте добавить:

setBackgroundColor(Color.parseColor("#FF0000"));
Длинная радуга
источник
6

Я использую на API мин 16, цель 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
лоро
источник
Обычно цветов по умолчанию немного. Новые цвета могут быть определены в res / values ​​/ colors, как описано здесь developer.android.com/samples/BasicMediaRouter/res/values/…
Кристиан
5

Вы можете просто использовать:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));
Даниэль Килинскас
источник
5
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
Джанлука Демаринис
источник
4

Этот вопрос говорит об изменении цвета фона представления. В одном из ответов человек объясняет, как изменить цвет фона во время выполнения. Очевидно, вы собираетесь изучить, как изменять другие объекты на экране, но это должно дать вам хорошее начало, по крайней мере, позволив вам изменить цвет фона представления при нажатии кнопки.

jbranchaud
источник
3

Заявление с Android 6 использовать ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
Ралука Лукач
источник
2

Вы можете просто использовать:

view.setBackgroundColor(Color.rgb(0, 198, 255));
Махмуд Салах Элдиен Сэйбер
источник
2

В kotlin вы можете сделать это так:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

Где getColorCompat()функция расширения:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)
Android-разработчик
источник
1
view.setBackgroundColor(R.color.primaryColor);

Добавляет цвет к предыдущему значению цвета, поэтому у меня другой цвет.

Что работает для меня это:

view.setBackgroundResource(R.color.primaryColor);
meralon
источник
1

Предположим, у нас есть основной цвет в 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);

        ....


    }
ForWebTech
источник
0

Вы должны передать intв аргументе.

Первый пример:

view.setBackgroundColor(-500136)

Второй пример:

int colorId = R.color.green;

view.setBackgroundResource(colorId);
Дэвид Мутенда
источник
0

Это должно работать нормально: v.setBackgroundColor(0xFF00FF00);

nishanuw
источник
0

Я перепробовал все вышеперечисленные способы. Но я не достиг того, что мне нужно. Вот моя попытка. Если вы используете hexcode для цвета и хотите установить цвет в качестве фона изображения, тогда это код kotlin.

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
Shaffz
источник