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


179

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

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

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

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

Спасибо.


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

Ответы:


281

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

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


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. * Для получения различных эффектов.


"перезаписывает / удаляет любой существующий фоновый ресурс", не совсем.
Юша Алеауб

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));

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 .


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

12

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

android:background="#FF00FF00"

Вопрос проясняет, что изменение цвета должно быть динамичным.
Питер vdL


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/…
Кристиан



4

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




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)

1
view.setBackgroundColor(R.color.primaryColor);

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

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

view.setBackgroundResource(R.color.primaryColor);

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);

        ....


    }

0

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

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

view.setBackgroundColor(-500136)

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

int colorId = R.color.green;

view.setBackgroundResource(colorId);


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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.