web-dev-qa-db-fra.com

Définir la couleur de fond du titre

Dans mon Android), je souhaite que la barre de titre standard/de base change de couleur.

Pour modifier la couleur du texte que vous avez setTitleColor(int color), existe-t-il un moyen de modifier la couleur d'arrière-plan de la barre?

106
Thys

Ce fil vous aidera à créer votre propre barre de titre dans un fichier xml et à l’utiliser dans vos activités.

Modifier

Voici un bref résumé du contenu du lien ci-dessus - Ceci est juste pour définir la couleur du texte et l'arrière-plan de la barre de titre - non redimensionnement, pas de boutons, juste l'exemple le plus simple

res/layout/mytitle.xml - Ceci est la vue qui représentera la barre de titre

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:id="@+id/myTitle"
  Android:text="This is my new title"
  Android:layout_width="fill_parent"
  Android:layout_height="fill_parent"
  Android:textColor="@color/titletextcolor"
   />

res/values ​​/ themes.xml - Nous voulons conserver le thème par défaut Android et nous devons simplement changer la couleur d'arrière-plan de l'arrière-plan du titre. Nous créons donc un thème qui hérite du thème par défaut et définit le style d'arrière-plan sur notre propre style.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="Android:Theme"> 
        <item name="Android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res/values ​​/ styles.xml - C’est ici que nous définissons le thème pour utiliser la couleur souhaitée pour l’arrière-plan du titre.

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="Android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res/values ​​/ colors.xml - Définissez ici la couleur souhaitée

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

Dans AndroidMANIFEST.xml, définissez l'attribut de thème dans les balises de l'application (pour l'application entière) ou dans les activités (uniquement cette activité).

<activity Android:name=".CustomTitleBar" Android:theme="@style/customTheme" ...

À partir de l'activité (appelée CustomTitleBar):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}
186
ccheneson

Merci pour cette explication claire, mais j'aimerais ajouter un peu plus à votre réponse en posant une question liée (vous ne voulez pas vraiment faire un nouveau post car celui-ci est le sous-sol de ma question).

Je déclare ma barre de titre dans une super-classe à partir de laquelle, toutes mes autres activités sont des enfants, de ne devoir changer la couleur de la barre qu'une seule fois. Je voudrais aussi ajouter une icône et changer le texte dans la barre. J'ai fait quelques tests et j'ai réussi à changer l'un ou l'autre, mais pas les deux en même temps (en utilisant setFeatureDrawable et setTitle). La solution idéale serait bien sûr de suivre l'explication donnée dans le lien donné dans le lien, mais comme je le déclare dans une superclasse, j'ai un problème en raison de la disposition dans setContentView et du R.id.myCustomBar, car si je Souviens-toi que je peux appeler setContentView une seule fois ...

EDIT Trouvé ma réponse:

Pour ceux qui, comme moi, aiment travailler avec des super-classes parce que c'est génial d'avoir un menu disponible partout dans une application, cela fonctionne de la même manière ici.

Ajoutez simplement ceci à votre super-classe:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(vous devez déclarer le textview en tant que variable de classe protégée)

Et puis la puissance de ceci est que, partout dans votre application (si par exemple toutes vos activités sont des enfants de cette classe), il vous suffit d'appeler

customTitleText.setText("Whatever you want in title");

et votre barre de titre sera édité.

Le code XML associé dans mon cas est (R.layout.customtitlebar):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="horizontal" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" Android:background="@color/background">
<ImageView Android:layout_width="25px" Android:layout_height="25px"
    Android:src="@drawable/icontitlebar"></ImageView>
<TextView Android:id="@+id/customtitlebar"
    Android:layout_width="wrap_content" Android:layout_height="fill_parent"
    Android:text="" Android:textColor="@color/textcolor" Android:textStyle="bold"
    Android:background="@color/background" Android:padding="3px" />
</LinearLayout>
18
Sephy

Il existe un autre moyen de modifier la couleur d'arrière-plan, mais il s'agit d'un hack qui risque d'échouer sur les futures versions de Android si la hiérarchie des vues de la fenêtre et son titre sont modifiés. Toutefois, le code gagné ne vous plantez pas, il vous suffit de définir la couleur souhaitée, dans un tel cas.

Dans votre activité, comme onCreate, faites:

View titleView = getWindow().findViewById(Android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}
11
mikeplate
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(Android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

sur le code ci-dessus, vous pouvez essayer, vous pouvez utiliser titre au lieu de barre de titre cela affectera toutes les activités de votre application

6

Ce code permet de modifier l’arrière-plan de la barre de titre par programme dans Android. Changez la couleur en une couleur que vous voulez.

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}
6
Edwinfad

Je suppose que non. Vous pouvez créer une activité sans titre et créer votre propre barre de titre dans la présentation de l'activité.

Vérifiez this , lignes 63 et suivantes:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

définit customview au lieu de la vue de titre par défaut.

2
skyman

Jetez un coup d'oeil dans platforms/Android-2.1/data/res/layout/screen.xml du SDK. Il semble y définir un titre. Vous pouvez souvent examiner de telles mises en page et emprunter le style="?android:attr/windowTitleStyle" styles que vous pouvez ensuite utiliser et remplacer dans vos propres TextViews.

Vous pourrez même sélectionner le titre pour un ajustement direct en faisant:

TextView title = (TextView)findViewById(Android.R.id.title);
2
Steve Pomeroy

Essayez avec le code suivant

View titleView = getWindow().findViewById(Android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

utilisez également ce lien très utile: http://nathanael.hevenet.com/Android-dev-changing-the-title-bar-background/

Les choses semblent s'être améliorées/facilité depuis Android 5.0 (API de niveau 21).

Je pense que ce que vous recherchez ressemble à ceci:

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Top-top notification/status bar color: -->
    <!--<item name="colorPrimaryDark">#000000</item>-->
    <!-- App bar color: -->
    <item name="colorPrimary">#0000FF</item>
</style>

Voir ici pour référence:

https://developer.Android.com/training/material/theme.html#ColorPalette

1

Il existe une alternative plus simple pour changer la couleur de la barre de titre, en utilisant la bibliothèque de support v7 appcompat fournie par Google.

Voir ce lien pour savoir comment configurer cette bibliothèque de support: https://developer.Android.com/tools/support-library/setup.html

Une fois que vous avez fait cela, il suffit d’ajouter les lignes suivantes à votre fichier res/values ​​/ styles.xml:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="Android:background">@color/titlebackgroundcolor</item>
</style>

(en supposant que "titlebackgroundcolor" soit défini dans votre res/values ​​/ colors.xml, par exemple:

<color name="titlebackgroundcolor">#0000AA</color>

)

1
stefan.m

J'ai fait cela en changeant les valeurs de couleur de style dans "res" -> "valeurs" -> "colors.xml" enter image description here

Cela changera les couleurs pour l'ensemble du projet, ce qui me convient parfaitement.

enter image description here

1
Brlja

tu peux l'utiliser.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
0
pavel