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

Bja*_*sen 188 android user-experience adt android-layout

我试图在Android UI设计上从一组幻灯片中克隆一个活动的设计.但是我遇到一个非常简单的任务问题.

我创建了如图所示的布局,标题是TextViewa RelativeLayout.现在我想改变背景颜色RelativeLayout,但我似乎无法弄清楚如何.

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

另外我希望在Eclipse Android UI设计器中有一个非常简单的方法,我必须要丢失它?

我目前有点沮丧,因为这应该是一个活动,最多只需点击几下.所以任何帮助都非常感谢.:)

Android活动设计

小智 274

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

<color name="red">#ffff0000</color>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 像魅力一样,谢谢.你能指点我参考的地方吗? (6认同)
  • 实际上:不.只是搜索过文档,这是非常标准的android内容,但似乎没有真正记录.开发站点上的教程和api示例都没有使用它.在某些功能方面,android doc有点缺乏.我想我在一些外部教程中偶然发现了它.通常,浏览api示例和示例项目是个好主意.您可以在`ANDROID_SDK\samples`文件夹中找到代码(适用于各种Android版本).整个api示例应用程序也预装在每个模拟器实例中. (6认同)
  • 还只是检查了UI设计器。没有容易找到的东西。但是无论如何,我还是建议手动在xml中编写东西。设计师最近有了很大的改进,但是我认为它仍然无法使用。不仅某些选项受到限制,而且在实际设备上的布局有时看起来完全不同*(尤其是在使用引用的可绘制资源时。根据我的经验,它们无法正确缩放,甚至根本无法显示)*。在设备或仿真器上测试布局。 (2认同)

And*_*ler 88

上面的答案很好.如果你愿意的话,你也可以这样编程

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

<RelativeLayout ...
...
android:id="@+id/your_layout_id"
...
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

然后,在Java代码中进行以下更改.

RelativeLayout rl = (RelativeLayout)findViewById(R.id.your_layout_id);
rl.setBackgroundColor(Color.RED);
Run Code Online (Sandbox Code Playgroud)

除此之外,如果你有colors.xml中定义的颜色,那么你也可以编程:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要它是动态的,我认为你不能使用XML. (24认同)
  • -1用于在代码中执行标记中应该执行的操作. (12认同)
  • @ BjarkeFreund-Hansen他承认其他答案,并提供这种程序化解决方案.不值得投票. (9认同)
  • 加上一个只是为了补偿@ BjarkeFreund-Hansen的减号 (7认同)
  • @ BjarkeFreund-Hansen,问题是如何设置背景而不是如何定义颜色,正确读取.那么如果问题就是这样呢?我承认这一点,并告诉"你也可以去......"所以他可能去或不可能.它也可以帮助别人,因为你已经看到了.你能 ?? (4认同)

yjw*_*yjw 39

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

  • @GMsoF:哦它确实有效,但它没有回答这个问题. (5认同)
  • -1因为我在问题中明确写了"我想定义一个我可以在多个地方使用的新颜色",因为我不想硬编码颜色值,而是将它定义为我可以在几个地方使用的资源. (4认同)

小智 21

res/values/colors.xml.

<color name="red">#ffff0000</color>
android:background="@color/red"
Run Code Online (Sandbox Code Playgroud)

例子对我不起作用,但是

android:background="#(hexidecimal here without these parenthesis)"
Run Code Online (Sandbox Code Playgroud)

在相对布局元素中为我工作作为属性.

  • 你忘记用颜色标签包装颜色标签了吗? (10认同)

小智 19

如果你想快速改变颜色(并且没有记忆的十六进制数字),android有一些你可以访问的预设颜色,如下所示:

android:background="@android:color/black"
Run Code Online (Sandbox Code Playgroud)

有15种颜色可供选择,非常适合快速测试,而且您无需设置其他文件.

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


Khe*_*raj 6

4 种可能的方式,使用您需要的一种。

1. 科特林

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

2. 数据绑定

<LinearLayout
    android:background="@{@color/white}"
Run Code Online (Sandbox Code Playgroud)

或者更有用的声明-

<LinearLayout
    android:background="@{model.colorResId}"
Run Code Online (Sandbox Code Playgroud)

3. XML

<LinearLayout
    android:background="#FFFFFF"

<LinearLayout
    android:background="@color/white"
Run Code Online (Sandbox Code Playgroud)

4. 爪哇

LinearLayout ll = (LinearLayout) findViewById(R.id.your_layout_id);
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
Run Code Online (Sandbox Code Playgroud)