设置 Android 布局元素的背景颜色。

206
我正在尝试克隆一组有关Android UI设计的幻灯片中的活动的设计。然而,我在一个非常简单的任务上遇到了问题。
我已经根据图像创建了布局,并且标题是RelativeLayout中的TextView。现在我希望更改RelativeLayout的背景颜色,但是我似乎无法找到解决方法。
我知道可以在XML文件中的RelativeLayout标签中设置android:background属性,但我应该将其设置为什么?我想定义一个新的颜色,可以在多个地方使用。它是drawable还是string?
此外,我希望从Eclipse Android UI设计器内部有一个非常简单的方法来实现这一点,但我可能会错过?
目前我有些沮丧,因为这应该是最多几次点击即可完成的活动。所以任何帮助都非常感谢 :)

Android activity design


30
你用了什么软件画右边的图形? - lucas
8
@lucas:我并没有画这些图表,正如我在问题中所提到的那样,它们来自关于Android UI设计的幻灯片集。请查看问题中的链接。 - Bjarke Freund-Hansen
9个回答

283

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

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

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

您还可以将任何drawable resource用作背景,使用android:background="@drawable/mydrawable"(这意味着9patch drawable、普通位图、形状drawable等)。


6
非常有效,谢谢。你能告诉我在哪里查阅到这个参考资料吗? - Bjarke Freund-Hansen
7
实际上,不是的。我查过了文档,这是相当标准的 Android 内容,但似乎没有真正记录。开发网站上的教程和 API 示例都没有使用它。在某些功能方面,Android 文档有些欠缺。我想我是在一些外部教程中偶然学到了它。通常浏览 API 示例和示例项目是一个好主意。您可以在ANDROID_SDK\samples文件夹中找到代码(适用于各种 Android 版本)。整个 API 示例应用程序也预装在每个模拟器实例中。 - user658042
2
刚刚检查了UI设计师,没有发现任何简单的东西。但我仍然建议通过手动编写XML来完成任务。设计师最近有所改进,但在我看来仍然无法使用。不仅有一些选项受限制,而且布局在实际设备上有时会完全不同(特别是在使用引用可绘制资源时。根据我的经验,它们不会得到正确的缩放或者甚至根本不会被显示)。请在您的设备或模拟器上测试您的布局。 - user658042
1
对于一些“默认”颜色,您可以使用以下语法:android:background="@android:color/white" - dalf
1
getResources().getColor()现在已经过时了。 - Rohit Bandil
显示剩余3条评论

96

以上答案不错。如果你愿意,也可以通过编程的方式来实现。

首先,你的布局应该有一个ID。通过在res/layout/*.xml中编写以下+id行来添加它。

<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。 - Guillermo Gutiérrez
1
+1 表示我需要根据状态标志在运行时更改它;我还可以使用 Color.TRANSPARENT 常量恢复原始颜色。 - Zac
11
他承认其他答案,并提供了这个编程解决方案。不值得被踩。 - Anubian Noob
4
@BjarkeFreund-Hansen,问题是如何设置背景而不是如何定义颜色,请正确阅读。如果问题是这样的,那又怎样呢?我已经承认了这一点,并告诉他“你也可以像这样去做”...所以他可以去做,也可以不去做。正如你已经看到的那样,这可能会帮助其他人。你能明白吗? - Android Killer
8
加一是为了弥补@BjarkeFreund-Hansen的减一。 - Rahul
显示剩余3条评论

46
你可以使用 android:background="#DC143C" 或其他RGB值来设置颜色。我没有任何问题以这种方式使用,如在这里所述。

6
因为我在问题中明确写道“我想定义一个新的颜色,可以在多个地方使用”,所以得到了-1分,因为我不想硬编码颜色值,而是将其定义为可以在多个地方使用的资源。 - Bjarke Freund-Hansen
7
它确实有效,但它并没有回答这个问题。 - Bjarke Freund-Hansen

23

这个

res/values/colors.xml.

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

例子对我不起作用,但是

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

将其作为属性在相对布局元素中对我很有用。


10
你是否忘记将颜色标签包裹在资源标签中? - elimirks

21
如果你想快速更改颜色(并且你没有记住十六进制数),Android有一些预设颜色可以像这样访问:
android:background="@android:color/black"

你可以选择15种颜色,这对于快速测试非常方便,而且不需要设置额外的文件。

如果按照上面所述的方法设置一个values/colors.xml文件并使用直接的十六进制仍然可行。


9

有4种可能的方法,使用其中一种即可。

1. Kotlin

Kotlin语言

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
Kotlin
linearLayout.setBackgroundColor(Color.rgb(0xf4,0x43,0x36))

或者

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

-

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

0
以上所有答案都是静态的。我想提供一个动态的答案。需要保持同步的两个文件是相对路径下的foo.xml与对应于此R.layout.fooactivity_bar.java
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);
        ...
    }
    ...
}

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接