Einstellen der Hintergrundfarbe des Android-Layoutelements

198

Ich versuche, das Design einer Aktivität aus einer Reihe von Folien im Android-UI-Design etwas zu klonen . Ich habe jedoch ein Problem mit einer sehr einfachen Aufgabe.

Ich habe das Layout wie im Bild gezeigt erstellt, und die Überschrift ist a TextViewin a RelativeLayout. Jetzt möchte ich die Hintergrundfarbe des ändern RelativeLayout, aber ich kann nicht herausfinden, wie.

Ich weiß, dass ich die android:backgroundEigenschaft im RelativeLayoutTag in der XML-Datei festlegen kann, aber auf was setze ich sie? Ich möchte eine neue Farbe definieren, die ich an mehreren Stellen verwenden kann. Ist es ein drawableoder ein string?

Außerdem würde ich erwarten, dass es innerhalb des Eclipse Android UI-Designers einen sehr einfachen Weg gibt, den ich vermissen muss.

Ich bin momentan etwas frustriert, da dies eine Aktivität sein sollte, die mit maximal wenigen Klicks ausgeführt wird. Jede Hilfe wird sehr geschätzt. :) :)

Android-Aktivitätsdesign

Bjarke Freund-Hansen
quelle
28
Mit welcher Software haben Sie das Diagramm auf der rechten Seite gezeichnet?
Lucas
8
@lucas: Ich habe die Diagramme nicht gezeichnet, wie ich in den Fragen festgestellt habe. Es handelt sich um eine Reihe von Folien zum Design der Android-Benutzeroberfläche. Siehe den Link in der Frage.
Bjarke Freund-Hansen

Antworten:

280

Sie können einfache Farbressourcen verwenden , die normalerweise im Inneren angegeben sind res/values/colors.xml.

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

und benutze diese via android:background="@color/red". Diese Farbe kann auch an anderer Stelle verwendet werden, z. B. als Textfarbe. Verweisen Sie auf XML auf die gleiche Weise oder rufen Sie es über Code ab getResources().getColor(R.color.red).

Sie können auch eine beliebige zeichnbare Ressource als Hintergrund verwenden android:background="@drawable/mydrawable"(dies bedeutet 9-Patch-Zeichen, normale Bitmaps, Form-Zeichen usw.).


quelle
6
Funktioniert wie ein Zauber, danke. Könnten Sie mich auf die Referenz verweisen, wo ich das hätte lesen sollen?
Bjarke Freund-Hansen
6
Uhh eigentlich: Nein. Ich habe gerade die Dokumente durchsucht, das ist ziemlich normales Android-Zeug, scheint aber nirgends wirklich dokumentiert zu sein. Weder die Tutorials auf der Dev-Site noch die API-Beispiele machen davon Gebrauch. Das Android-Dokument fehlt etwas, wenn es um einige Funktionen geht. Ich glaube, ich habe es versehentlich in einigen externen Tutorials aufgegriffen. Normalerweise ist es jedoch eine gute Idee, die API-Beispiele und Beispielprojekte zu durchsuchen. Sie finden den Code im ANDROID_SDK\samplesOrdner (für verschiedene Android-Versionen). Die gesamte API-Beispiel-App ist auch in jeder Emulatorinstanz vorinstalliert.
2
Auch gerade den UI-Designer überprüft. Nichts leicht zu finden. Aber ich empfehle trotzdem, die Dinge von Hand in die XML zu schreiben. Der Designer hat sich in letzter Zeit stark verbessert, ist aber meiner Meinung nach immer noch nicht verwendbar. Einige Optionen sind nicht nur eingeschränkt, das Layout sieht auf einem realen Gerät manchmal völlig anders aus (insbesondere bei Verwendung von referenzierbaren Zeichenressourcen. Sie werden meiner Erfahrung nach nicht richtig skaliert oder gar nicht angezeigt) . Testen Sie Ihre Layouts auf Ihrem Gerät oder einem Emulator.
1
Für einige "Standard"
-Farben
1
getResources (). getColor () ist jetzt veraltet.
Rohit Bandil
90

Die obigen Antworten sind nett. Sie können auch programmgesteuert so vorgehen, wenn Sie möchten

Zunächst sollte Ihr Layout eine ID haben. Fügen Sie es hinzu, indem Sie die folgende +idZeile in res / layout / *. Xml schreiben

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

Nehmen Sie dann in Ihrem Java-Code die folgenden Änderungen vor.

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

Abgesehen davon können Sie, wenn Sie die Farbe in color.xml definiert haben, auch programmgesteuert Folgendes tun:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Android Killer
quelle
24
Wenn Sie es dynamisch wollen, können Sie XML nicht verwenden.
Guillermo Gutiérrez
1
+1, da ich es zur Laufzeit entsprechend dem Statusflag ändern muss; Mit der Konstante Color.TRANSPARENT konnte ich auch die ursprüngliche Farbe zurückerhalten.
Zac
10
@ BjarkeFreund-Hansen Er erkennt die anderen Antworten an und bietet diese programmatische Lösung an. Nicht würdig.
Anubian Noob
4
@ BjarkeFreund-Hansen, die Frage ist, wie man den Hintergrund einstellt, nicht wie man Farbe definiert, richtig liest. Und was ist, wenn die Frage dazu steht? Ich erkenne das an und sagte "du kannst auch so gehen" ... damit er gehen kann oder nicht. Es kann auch anderen helfen, wie Sie es bereits gesehen haben. können Sie ??
Android Killer
7
plus eins, nur um das Minus von @ BjarkeFreund-Hansen
Rahul
42

Sie können android:background="#DC143C"oder andere RGB- Werte für Ihre Farbe verwenden. Ich habe kein Problem damit, wie hier angegeben

yjw
quelle
5
-1, weil ich in der Frage explizit geschrieben habe "Ich möchte eine neue Farbe definieren, die ich an mehreren Stellen verwenden kann", weil ich den Farbwert nicht fest codieren wollte, sondern ihn als Ressource definieren wollte, die ich an mehreren Stellen verwenden kann.
Bjarke Freund-Hansen
6
@ GMsoF: Oh, es funktioniert, aber es beantwortet die Frage nicht.
Bjarke Freund-Hansen
21

Das

res/values/colors.xml.

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

Beispiel hat bei mir nicht funktioniert, aber das

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

arbeitete für mich im relativen Layoutelement als Attribut.

user2585548
quelle
10
Haben Sie vergessen, das Farb-Tag mit einem Ressourcen-Tag zu versehen?
Elimirks
19

Wenn Sie eine Farbe schnell ändern möchten (und keine Hex-Zahlen gespeichert sind), hat Android einige voreingestellte Farben, auf die Sie wie folgt zugreifen können:

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

Sie können aus 15 Farben auswählen, die zum schnellen Testen geeignet sind, und Sie müssen keine zusätzlichen Dateien einrichten.

Das Einrichten einer Datei values ​​/ color.xml und die Verwendung von Straight Hex wie oben beschrieben funktionieren weiterhin.

kgibilterra
quelle
4

4 Möglichkeiten, verwenden Sie eine, die Sie benötigen.

1. Kotlin

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

2. Datenbindung

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

ODER nützlichere Aussage-

<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
quelle
2

Mit Android Studio 2.1.2 (oder möglicherweise früher) können Sie aus einem Farbkreis auswählen:

Farbrad in Android Studio

Ich habe dies erreicht, indem ich meinem Layout Folgendes hinzugefügt habe:

android:background="#FFFFFF"

Dann klickte ich auf die Farbe FFFFFF und auf die Glühbirne, die erschien.

Shygar
quelle
1

Kotlin

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

oder

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

- -

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

Die Antworten sind vor allem statisch. Ich dachte, ich würde eine dynamische Antwort geben. Die beiden Dateien, die synchronisiert werden müssen, sind relativ foo.xmlzum Layout und activity_bar.javaentsprechen der entsprechenden Java-KlasseR.layout.foo .

In foo.xmlLegen Sie eine ID für das gesamte Layout fest:

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

Und im activity_bar.javaSet die Farbe in der 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);
        ...
    }
    ...
}

Ich hoffe das hilft.

T. Woody
quelle