Настройка цвета фона элемента макета Android - PullRequest
182 голосов
/ 11 сентября 2011

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

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

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

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

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

Android activity design

Ответы [ 9 ]

268 голосов
/ 11 сентября 2011

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

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

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

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

86 голосов
/ 11 сентября 2011

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

Во-первых, ваш макет должен иметь идентификатор. Добавьте его, написав следующую строку +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));
38 голосов
/ 11 сентября 2011

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

21 голосов
/ 09 августа 2013

The

res/values/colors.xml.

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

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

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

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

19 голосов
/ 29 ноября 2014

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

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

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

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

2 голосов
/ 08 августа 2016

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

Color Wheel in Android Studio

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

android:background="#FFFFFF"

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

1 голос
/ 04 февраля 2019

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));
1 голос
/ 23 ноября 2018

Котлин

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

или

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

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))
0 голосов
/ 06 сентября 2018

Ответы прежде всего статичны. Я думал, что я бы дал динамический ответ. Два файла, которые должны быть синхронизированы: относительный 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);
        ...
    }
    ...
}

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

...