Настройка цвета фона элемента макета Android

198

Я пытаюсь несколько клонировать дизайн упражнения из набора слайдов по дизайну пользовательского интерфейса Android . Однако у меня возникла проблема с очень простой задачей.

Я создал макет, как показано на рисунке, а заголовок - TextViewв RelativeLayout. Теперь я хочу изменить цвет фона RelativeLayout, но я не могу понять, как это сделать.

Я знаю, что могу установить android:backgroundсвойство в RelativeLayoutтеге в файле XML, но что мне установить? Я хочу определить новый цвет, который я могу использовать в нескольких местах. Это drawableили string?

Кроме того, я ожидал бы, что из конструктора пользовательского интерфейса Eclipse Android будет очень простой способ сделать это, чего мне не хватает?

Я немного расстроен в настоящее время, так как это должно быть действие, которое выполняется с помощью нескольких кликов максимум. Так что любая помощь очень ценится. :)

Android активность дизайн

Бьярке Фрейнд-Хансен
источник
28
какое программное обеспечение вы использовали для рисования графика на правой стороне?
Лукас
8
@lucas: я не рисовал диаграммы, как я заметил в вопросах, это из набора слайдов о дизайне пользовательского интерфейса Android. Смотрите ссылку в вопросе.
Бьярке Фрейнд-Хансен

Ответы:

280

Вы можете использовать простые цветовые ресурсы , указанные обычно внутри res/values/colors.xml.

<color name="red">#ffff0000</color>

и использовать это через android:background="@color/red". Этот цвет также можно использовать где угодно, например, как цвет текста. Обратитесь к нему в XML таким же способом или получите его в коде через getResources().getColor(R.color.red).

Вы также можете использовать любой ресурсandroid:background="@drawable/mydrawable" для рисования в качестве фона, используйте для этого (это означает, что можно рисовать 9 патчей, обычные растровые изображения, рисовать фигуры, ...).


источник
6
Работает как шарм, спасибо. Не могли бы вы указать мне ссылку, где я должен был прочитать это?
Бьярке Фрейнд-Хансен
6
Uhh на самом деле: Нет. Просто искал документы, это довольно стандартные вещи для Android, но, похоже, нигде не документировано. Ни учебники на сайте разработчика, ни примеры API не используют это. Доку Android не хватает, когда дело доходит до некоторых функций. Я думаю, что поднял это случайно в некоторых внешних уроках. Обычно это хорошая идея, чтобы просмотреть примеры API и примеры проектов, хотя. Вы можете найти код внутри ANDROID_SDK\samplesпапки (для различных версий Android). Весь пример приложения API также предустановлен в каждом экземпляре эмулятора.
2
Также только что проверил дизайнер интерфейса. Ничего легкого не найти. Но я все равно рекомендую писать вещи вручную в xml. В последнее время дизайнер сильно улучшился, но, на мой взгляд, он по-прежнему бесполезен. Мало того, что некоторые параметры ограничены, макет иногда выглядит совершенно по-другому на реальном устройстве (особенно при использовании ссылочных ресурсов для рисования. Они не масштабируются правильно или даже не отображаются в моем опыте) . Проверьте свои макеты на вашем устройстве или на эмуляторе.
1
для некоторых цветов «по умолчанию» вы можете использовать этот синтаксис: android: background = "@ android: color / white"
dalf
1
getResources (). getColor () устарела.
Рохит Бандил
90

Приведенные выше ответы хороши. Вы также можете сделать это программно, если хотите

Во-первых, ваш макет должен иметь идентификатор. Добавьте его, написав следующую +idстроку в res / layout / *. Xml

<RelativeLayout ...
...
android:id="@+id/your_layout_id"
...
</RelativeLayout>

Затем в своем коде Java внесите следующие изменения.

RelativeLayout rl = (RelativeLayout)findViewById(R.id.your_layout_id);
rl.setBackgroundColor(Color.RED);

кроме этого, если у вас есть цвет, определенный в colors.xml, то вы также можете сделать это программно:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Android Killer
источник
24
Если вы хотите, чтобы это динамично, я думаю, вы не можете использовать XML.
Гильермо Гутьеррес
1
+1 для меня нужно изменить во время выполнения в соответствии с флагом состояния; Я также смог вернуть исходный цвет, используя константу Color.TRANSPARENT.
Зак
10
@ BjarkeFreund-Hansen Он признает другие ответы и предоставляет это программное решение. Не достойный даунвот.
Анубиан Нуб
4
@ BjarkeFreund-Hansen, вопрос в том, как установить фон, а не как определить цвет, читайте правильно. И что, если вопрос об этом. Я признаю это и сказал: «Ты тоже можешь идти, как»… так что он может идти или нет. Также это может помочь другим, как вы уже видели. ты можешь ??
Android Killer
7
плюс один, просто чтобы компенсировать минус один от @ BjarkeFreund-Hansen
Рахул
42

Вы можете использовать android:background="#DC143C"или любые другие значения RGB для вашего цвета. У меня нет проблем, используя его таким образом, как указано здесь

yjw
источник
5
-1, потому что я явно написал «Я хочу определить новый цвет, который я могу использовать в нескольких местах» в вопросе, потому что я не хотел жестко задавать значение цвета, а определял его как ресурс, который я могу использовать в нескольких местах.
Бьярке Фрейнд-Хансен
6
@GMsoF: О, это работает, но не отвечает на вопрос.
Бьярке Фрейнд-Хансен,
21

The

res/values/colors.xml.

<color name="red">#ffff0000</color>
android:background="@color/red"

пример не работал для меня, но

android:background="#(hexidecimal here without these parenthesis)"

работал для меня в элементе относительного макета в качестве атрибута.

user2585548
источник
10
Вы забыли обернуть цветной тег тегом ресурсов?
elimirks
19

Если вы хотите быстро изменить цвет (а у вас нет запомненных шестнадцатеричных чисел), у Android есть несколько предустановленных цветов, к которым вы можете получить доступ следующим образом:

android:background="@android:color/black"

Вы можете выбрать 15 цветов, которые удобны для быстрого тестирования, и вам не нужно настраивать дополнительные файлы.

Настройка файла values ​​/ colors.xml и использование прямого Hex, как описано выше, все равно будет работать.

kgibilterra
источник
4

4 возможных способа, используйте тот, который вам нужен.

1. Котлин

val ll = findViewById<LinearLayout>(R.id.your_layout_id)
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white))

2. Привязка данных

<LinearLayout
    android:background="@{@color/white}"

ИЛИ более полезное утверждение

<LinearLayout
    android:background="@{model.colorResId}"

3. XML

<LinearLayout
    android:background="#FFFFFF"

<LinearLayout
    android:background="@color/white"

4. Java

LinearLayout ll = (LinearLayout) findViewById(R.id.your_layout_id);
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
Khemraj
источник
2

Android студия 2.1.2 (или, возможно, раньше) позволит вам выбрать цветовой круг:

Цветовое колесо в Android Studio

Я получил это, добавив следующее в мой макет:

android:background="#FFFFFF"

Затем я нажал на цвет FFFFFF и нажал на лампочку, которая появилась.

Shygar
источник
1

Котлин

linearLayout.setBackgroundColor(Color.rgb(0xf4,0x43,0x36))

или

<color name="newColor">#f44336</color>

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))
Bemtorres
источник
0

Ответы прежде всего статичны. Я думал, что я бы дал динамический ответ. Два файла, которые должны быть синхронизированы, относятся foo.xmlк макету и activity_bar.javaсоответствуют классу Java, соответствующему этому R.layout.foo.

В foo.xmlустановить идентификатор для всего макета:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/foo" .../>

И в activity_bar.javaнаборе цвет в onCreate():

public class activity_bar extends AppCompatActivty {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.foo);

            //Set an id to the layout
        RelativeLayout currentLayout = 
                    (RelativeLayout) findViewById(R.id.foo);

        currentLayout.setBackgroundColor(Color.RED);
        ...
    }
    ...
}

Надеюсь, это поможет.

T.Woody
источник