Налаштування кольору фону елемента макета Android


198

Я намагаюся дещо клонувати дизайн діяльності з набору слайдів на дизайні Android UI . Однак у мене є проблема з дуже простим завданням.

Я створив макет, як показано на зображенні, а заголовок - TextViewa RelativeLayout. Тепер я хочу змінити колір тла RelativeLayout, але я не можу зрозуміти, як це зробити.

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

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

Зараз я трохи засмучений, оскільки це має бути діяльність, яка виконується максимум кількома клацаннями. Тож будь-яка допомога дуже цінується. :)

Дизайн діяльності Android


28
яке програмне забезпечення ви використовували для малювання графіка праворуч?
Лукас

8
@lucas: я не малював діаграм, як я зазначив у запитаннях, це з набору слайдів на дизайні Android UI. Дивіться посилання у питанні.
Bjarke Freund-Hansen

Відповіді:


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
Працює як шарм, дякую. Не могли б ви вказати мені на посилання, де я мав це прочитати?
Bjarke Freund-Hansen

6
Ну, насправді: Ні. Я просто шукав документи, це досить стандартні речі для Android, але, схоже, ніде насправді не зафіксовано. Ні навчальні посібники на сайті розробників, ні зразки api не використовують цього. Документ андроїд дещо бракує, коли мова йде про деякі функції. Я думаю, що я підібрав це випадково в деяких зовнішніх навчальних посібниках. Зазвичай це гарна ідея, щоб переглянути зразки api та зразки проектів. Ви можете знайти код всередині ANDROID_SDK\samplesпапки (для різних версій Android). Весь зразок програми api також встановлений у кожному екземплярі емулятора.

2
Також просто перевірив дизайнер інтерфейсу. Нічого легко знайти. Але я все-таки рекомендую писати речі вручну в xml. Дизайнер останнім часом значно покращився, але на мою думку це все ще не корисно. Мало того, що деякі параметри обмежені, макет іноді виглядає зовсім інакше на реальному пристрої (особливо при використанні посилальних джерел ресурсів. Вони не масштабуються правильно або навіть не відображаються на моєму досвіді) . Перевірте макети на своєму пристрої або на емуляторі.

1
для деяких кольорів "за замовчуванням" ви можете використовувати цей синтаксис: android: background = "@ android: color / white"
dalf

1
getResources (). getColor () застарілий.
Rohit Bandil

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

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

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

24
Якщо ви хочете, щоб це було динамічним, я думаю, ви не можете використовувати XML.
Гільєрмо Гутьеррес

1
+1, оскільки мені потрібно змінити його під час виконання відповідно до прапора статусу; Я також зміг повернути оригінальний колір за допомогою константи Color.TRANSPARENT.
Зак

10
@ BjarkeFreund-Hansen Він визнає інші відповіді та надає це програмне рішення. Не дозволено гідно.
Anubian Noob

4
@ BjarkeFreund-Hansen, питання полягає в тому, як встановити фон, а не як визначити колір, прочитати правильно. І що робити, якщо питання про це. Я визнаю це і сказав "ви також можете піти як" .... так що він може піти чи не може. Крім того, це може допомогти іншим, як це ви вже бачили. ти можеш ??
Android Killer

7
плюс один просто для компенсації мінус одного від @ BjarkeFreund-Hansen
Рахул

42

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


5
-1 тому, що я прямо написав "Я хочу визначити новий колір, який я можу використовувати в декількох місцях" у запитанні, тому що я не хотів жорстко кодувати значення кольору, але визначив його як ресурс, який я можу використовувати в декількох місцях.
Bjarke Freund-Hansen

6
@GMsoF: О, це працює, але це не відповідає на питання.
Bjarke Freund-Hansen

21

The

res/values/colors.xml.

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

Приклад не працював для мене, але

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

працював для мене у відносному елементі компонування як атрибут.


10
Ви забули обернути тег кольорів тегом ресурсів?
усувається

19

Якщо ви хочете швидко змінити колір (а вам не запам’ятовуються шістнадцяткові номери), андроїд має кілька попередньо встановлених кольорів, до яких ви можете отримати доступ таким чином:

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

Ви можете вибрати 15 кольорів, які приємні для швидкого тестування речей, і вам не потрібно встановлювати додаткові файли.

Налаштування файлу значень / color.xml та використання прямого Hex, як пояснено вище, все одно працюватиме.


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

2

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

Кольорове колесо в Android Studio

Я отримав це, додавши до моєї версії таке:

android:background="#FFFFFF"

Потім я натиснув на колір FFFFFF і натиснув на лампочку, що з’явилася.


1

Котлін

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

або

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

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))

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

Я сподіваюся, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.