设置Android布局元素的背景色


198

我正在尝试克隆某种活动的设计 从Android UI设计的一组幻灯片中设计。但是我有一个非常简单的任务的问题。

我已经创建了如图所示的布局,并且标题是TextView一个RelativeLayout。现在,我想更改的背景颜色RelativeLayout,但是似乎无法弄清楚该怎么做。

我知道可以在XML文件android:backgroundRelativeLayout标记中设置属性,但是该将其设置为什么呢?我想定义一种可以在多个地方使用的新颜色。是a drawable还是a string

另外,我希望从Eclipse Android UI设计器中找到一种非常简单的方法,我一定会错过这种方法吗?

我目前有点沮丧,因为这应该是一次最多点击几下就可以进行的一项活动。因此,非常感谢您的帮助。:)

Android活动设计


28
您使用什么软件在右侧绘制图形?
lucas 2014年

8
@lucas:正如我在问题中指出的那样,我没有绘制图表,它来自于Android UI设计的一组幻灯片。请参阅问题中的链接。
Bjarke Freund-Hansen 2014年

Answers:


280

您可以使用通常在内部指定的简单颜色资源res/values/colors.xml

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

并通过来使用它android:background="@color/red"。该颜色也可以在其他任何地方使用,例如作为文本颜色。以相同的方式在XML中引用它,或通过在代码中获得它getResources().getColor(R.color.red)

您还可以将任何可绘制资源用作背景,android:background="@drawable/mydrawable"用于此目的(这意味着9patch可绘制对象,普通位图,形状可绘制对象..)。


6
就像魅力一样,谢谢。您能指出我应该阅读的参考书吗?
Bjarke Freund-Hansen

6
嗯,实际上:否。只是搜索了文档,这是相当标准的android内容,但似乎没有真正记载的地方。开发站点上的教程和api示例均未使用此功能。涉及某些功能时,android doc有所欠缺。我想我是在一些外部教程中偶然捡到的。通常,浏览api示例和示例项目通常是一个好主意。您可以在ANDROID_SDK\samples文件夹中找到代码(适用于各种Android版本)。整个api示例应用程序还预装在每个模拟器实例中。

2
还只是检查了UI设计器。没有容易找到的东西。但无论如何,我还是建议手动在xml中编写东西。设计师最近有了很大的改进,但是我认为它仍然无法使用。不仅限制了某些选项,而且在实际设备上的布局有时看起来完全不同(尤其是在使用引用的可绘制资源时。根据我的经验,它们无法正确缩放,甚至根本无法显示)。在设备或仿真器上测试布局。

1
对于某些“默认”颜色,您可以使用以下语法:android:background =“ @ android:color / white”
dalf 2014年

1
getResources()。getColor()现在已弃用。
罗希特·班迪尔

90

上面的答案很好,如果您愿意,也可以通过编程方式像这样

首先,您的布局应具有ID。通过+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));

24
如果您希望它是动态的,那么我认为您不能使用XML。
GuillermoGutiérrez2013年

1
+1,因为我需要在运行时根据状态标志进行更改;通过使用Color.TRANSPARENT常量,我还可以恢复原始颜色。
扎克2014年

10
@ BjarkeFreund-Hansen他承认其他答案并提供了此编程解决方案。不值得投票。
Anubian Noob 2015年

4
@ BjarkeFreund-Hansen,问题是如何设置背景而不是如何定义颜色,请正确阅读。因此,如果问题出在那该怎么办。我承认这一点,并告诉他“您也可以去”。……所以他可能会去也可能不会。您也可以看到它对其他人的帮助。你能 ??
Android Killer,2015年

7
加一只是为了补偿@ BjarkeFreund-Hansen的减一
Rahul

42

您可以使用android:background="#DC143C"或任何其他RGB值作为颜色。我用这种方式有没有问题,说这里


5
-1是因为我在问题中明确写了“我想定义一种可以在多个地方使用的新颜色”,因为我不想对颜色值进行硬编码,而是将其定义为可以在多个地方使用的资源。
Bjarke Freund-Hansen

6
@GMsoF:哦,它确实有效,但是不能回答问题。
Bjarke Freund-Hansen 2015年

21

res/values/colors.xml.

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

这个例子对我没有用,但是

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

在我的相对布局元素中为我工作。


10
您是否忘了用资源标签包装颜色标签?
elimirks

19

如果您想快速更改颜色(并且没有记忆十六进制数字),android有一些预设颜色,您可以像这样访问:

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

您可以选择15种颜色,从中可以快速测试出各种颜色,而无需设置其他文件。

设置一个values / colors.xml文件并使用如上所述的直十六进制仍然有效。


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设置整个布局的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);
        ...
    }
    ...
}

我希望这有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.