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

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

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

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

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

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

Android activity design

7 ответов


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

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

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

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


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

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

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

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));

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


на

res/values/colors.xml.

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

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

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

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


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

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

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

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


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

Color Wheel in Android Studio

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

android:background="#FFFFFF"

затем я щелкнул по цвету FFFFFF и щелкнул по появившейся лампочке.


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

на foo.xml установите id для всего макета:

<?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);
        ...
    }
    ...
}

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