2015-10-22 16 views
7
Android Studio 1.5 

Ho questo layout chiamato chat_profile_header che verrà utilizzato in molti layout. Ho impostato lo su un colore indaco. Il problema è quando includo questa intestazione in altri layout, voglio essere in grado di cambiare il colore dello sfondo in base al tema di quel layout. Tutto nell'intestazione rimarrà lo stesso.Ignora l'attributo dello sfondo dell'elemento di inclusione per cambiare il colore di sfondo

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

Qui sto usando l'intestazione sopra inclusa in questo layout. Tuttavia, in base a questo tema, voglio cambiare l'intestazione in un altro colore grigio background. Tuttavia, non penso di poter ignorare l'attributo del colore di sfondo.

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

C'è un modo per farlo senza dover creare diversi layout di intestazione in base allo sfondo. Sembra un sacco di duplicati.

risposta

11

this does not seem to be possible. È possibile impostare lo sfondo da 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> 

questo codice 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); 
+0

Sono d'accordo. L'unica via percorribile qui è Java. –

+0

ok. @CoryTrese grazie – MHossein

2

È sempre possibile modificare il colore di sfondo con il tema di layout specificato. Basta impostare il

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

quindi impostare il colorPrimary sotto i vostri file di stile tema. Attenzione: impostando il colore primario, si modifica anche il colore della barra delle azioni.

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

Usando questo metodo, lo sfondo sarà sempre lo stesso come il colore specificato sotto lo stile tema. Solo nel caso, voi non sapete come impostare il tema per voi l'attività, si può sempre fare nel vostro AndroidManifest.xml

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

Non è possibile impostare il colore di sfondo per < include> tag .

Come si imposta il colore di sfondo del tag include, quindi verrà incasinato con il colore di sfondo del layout include.

Quindi dal mio punto di vista si dovrebbe rendere trasparente il layout di inclusione e quindi provare a impostarne il colore di sfondo.

In questo caso non verrà confuso con il colore del layout di inclusione.

Spero che ti possa aiutare a farti un'idea.

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"/> 

assegnare id al RelativeLayout Android: id = "@ + id/rl_profile_header" allora inizializzarlo in cui si desidera utilizzare come RelativeLayout rl=(RelativeLayout)findViewById(R.id.rl_profile_header) allora setColor come bisogno utilizzando rl.setBackgroundColor(R.color.red)

Problemi correlati