覆盖include的background属性以更改背景颜色

时间:2015-10-22 09:09:23

标签: android android-layout

Android Studio 1.5

我有一个名为chat_profile_header的布局,将在许多布局中使用。我已将background设置为靛蓝色。问题是当我在其他布局中包含此标题时,我希望能够根据该布局的主题更改背景颜色。标题中的所有内容都将保持不变。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/profile_header_indigo_500">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/profile_image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@drawable/photorace"
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/tvProfileName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/profile_image"
        android:layout_toEndOf="@id/profile_image"
        android:layout_centerVertical="true"
        android:layout_marginLeft="8dp"
        android:fontFamily="sans-serif"
        android:textColor="@android:color/white"/>
</RelativeLayout>

这里我使用的是此布局中包含的上述标题。但是,基于此主题,我想将标题更改为另一个background颜色灰色。但是,我认为我不能覆盖背景颜色属性。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <include
        layout="@layout/chat_profile_header"
        android:background="@color/child_header_lighter_grey"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvParentList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

有没有办法在不必根据背景创建不同的页眉布局的情况下执行此操作。似乎有很多重复。

5 个答案:

答案 0 :(得分:12)

this does not seem to be possible。您可以从java设置背景。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <include
        android:id="@+id/layout1"
        layout="@layout/chat_profile_header"/>

    <include
        android:id="@+id/layout2"
        layout="@layout/chat_profile_header"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvParentList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

这个java代码

Linealayout layout1 = (Linealayout)findViewbyId(R.id.layout1);
Linealayout layout2 = (Linealayout)findViewbyId(R.id.layout2);

layout1.setBackgroundColor(R.color.color_1);
layout2.setBackgroundColor(R.color.color_2);

答案 1 :(得分:2)

您始终可以使用指定的布局主题更改背景颜色。 只需设置

即可
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/colorPrimary">
</LinearLayout>
  

然后在主题样式文件下设置colorPrimary。警告:通过将颜色设置为主色,您也将更改操作栏的颜色。

<style name="MyCustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@android:color/blue</item>
</style>
  

使用此方法,您的背景将始终与您在主题样式下指定的颜色相同。   以防万一,您不知道如何为您的活动设置主题,您可以随时在AndroidManifest.xml中进行

<activity
        android:name=".Activity"
        android:theme="@style/MyCustomTheme"
/>

答案 2 :(得分:2)

  

您无法将背景颜色设置为&lt; include&gt;标签

当您设置包含标记的背景颜色时,它将与包含布局的背景颜色混淆。

  

因此,从我的角度来看,你应该制作包含布局   透明,然后尝试设置它的背景颜色。

在这种情况下,它不会与包含布局的颜色混淆。

希望它能帮助你了解它。

答案 3 :(得分:2)

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/rl_profile_header"
android:layout_height="60dp"
android:background="@color/profile_header_indigo_500">

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/profile_image"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:src="@drawable/photorace"
    android:layout_centerVertical="true"/>

<TextView
    android:id="@+id/tvProfileName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/profile_image"
    android:layout_toEndOf="@id/profile_image"
    android:layout_centerVertical="true"
    android:layout_marginLeft="8dp"
    android:fontFamily="sans-serif"
    android:textColor="@android:color/white"/>

为您的RelativeLayout分配ID 机器人:ID = “@ + ID / rl_profile_header” 然后将其初始化到您想要使用的位置 像RelativeLayout rl=(RelativeLayout)findViewById(R.id.rl_profile_header) 然后根据需要使用rl.setBackgroundColor(R.color.red)

设置setColor

答案 4 :(得分:2)

似乎不可能。 来自https://developer.android.com/training/improving-layouts/reusing-layouts “通过在标记中指定布局参数,您还可以覆盖所包含布局的根视图的所有布局参数(任何 android:layout_ *属性)。”