Як встановити колір тла перегляду


179

Я намагаюся встановити колір тла Перегляду (в даному випадку Кнопку).

Я використовую цей код:

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

Це змушує кнопку зникнути з екрана. Що я роблю неправильно, і що це правильний спосіб змінити колір тла на будь-якому представленні?

Дякую.


1
Це виглядає правильно. Насправді, я не думаю, що вам потрібно викликати недійсний (). Коли ви говорите, що кнопка зникає, ви маєте на увазі, що буквально або ви маєте на увазі, що на кнопці був текст або зображення, яке зникає?
RickNotFred

Відповіді:


281

Ви зробили свою кнопку прозорою. Перший байт - це альфа.

Спробуйте v.setBackgroundColor(0xFF00FF00);


2
Відповідь EddieB нижче є набагато кращою, оскільки це видаляє будь-які межі тощо, наприклад, підкреслення EditText
Розплавлений лід

@aroth краще Color.Green? Якщо я хочу доповнити кольори аргументом? ... Ваша відповідь застаріла
доставіть

2
@delive - Приходьте знову? Color.GREEN це НЕ рекомендується, і включає в себе альфа - байт. Це значення 0xff00ff00, точно так же , як то , що пропонується у відповіді, за винятком того, він також має перевагу бути читабельним людиною . Більшість розробників віддають перевагу зрозумілому людині рішення.
aroth

145

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

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

Експериментуйте з PorterDuff.Mode. * Для різних ефектів.


"перезаписує / видаляє будь-який існуючий фоновий ресурс", насправді.
Yousha Aleayoub

2
Мені довелося використовувати вищезазначене разом з v.invalidate (); на наступному рядку.
Хашим Ахтар

1
спробував цей витрачений час і пішов з прийнятою відповіддю, v.getBackground () дав виняток nullpointer і розбився.
Siddarth G

Це плюс 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... методи, які вже дзвонять.
weston

v.setBackgroundColor(0x00FF00);це лише їх код, який, за їхніми словами, не працює. Я також очікував би прозорості.
weston

35

Ви можете встановити шістнадцятковий колір на будь-який ресурс за допомогою:

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: не визначено обробник" та діалогове вікно на екрані "додаток несподівано зупинився". Гадаю, мені потрібно більше читати в інтерфейсі. Будь-які підказки вітаються. Дякую.
Петро vdL

12

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

android:background="#FF00FF00"

Питання чітко пояснює, що зміна кольору має бути динамічною.
Пітер vdL


6

Я використовую в API min 16, ціль 23

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

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));

Зазвичай кольорів за замовчуванням не так багато. Нові кольори можна визначити у розділі res / values ​​/ color, як описано тут 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.