Dans mon application Android, je souhaite que la barre de titre standard / basique change de couleur.
Pour changer la couleur du texte que vous avez setTitleColor(int color)
, existe-t-il un moyen de changer la couleur d'arrière-plan de la barre?
Dans mon application Android, je souhaite que la barre de titre standard / basique change de couleur.
Pour changer la couleur du texte que vous avez setTitleColor(int color)
, existe-t-il un moyen de changer la couleur d'arrière-plan de la barre?
Réponses:
Ce fil vous aidera à créer votre propre barre de titre dans un fichier xml et à l'utiliser dans vos activités
Éditer
Voici un bref résumé du contenu du lien ci-dessus - Il s'agit simplement de définir la couleur du texte et l'arrière-plan de la barre de titre - pas de redimensionnement, pas de boutons, juste l'exemple le plus simple
res / layout / mytitle.xml - C'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 Android par défaut et avons juste besoin de 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éfinissons 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 que nous voulons 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 soit dans l'application (pour l'ensemble de l'application), soit dans les balises d'activité (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);
}
Merci pour cette explication claire, mais j'aimerais ajouter un peu plus à votre réponse en posant une question liée (je ne veux pas vraiment faire un nouveau message car celui-ci est le sous-sol de ma question).
Je déclare ma barre de titre dans une Superclasse à partir de laquelle, toutes mes autres activités sont des enfants, pour devoir changer la couleur de la barre une seule fois. Je voudrais également 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 dans le fil de discussion donné dans le lien, mais comme je le déclare dans une superclasse, j'ai un problème dû à la disposition de setContentView et du R.id.myCustomBar, car si je rappelez-vous bien que je ne peux appeler setContentView qu'une seule fois ...
EDIT J'ai trouvé ma réponse:
Pour ceux qui, comme moi, aiment travailler avec des superclasses parce que c'est génial pour avoir un menu disponible partout dans une application, cela fonctionne de la même manière ici.
Ajoutez simplement ceci à votre superclasse:
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 comme variable de classe protégée)
Et puis le pouvoir 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 modifiée.
Le 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>
Il existe un autre moyen de changer la couleur d'arrière-plan, mais il s'agit d'un piratage et pourrait échouer sur les futures versions d'Android si la hiérarchie d'affichage de la fenêtre et son titre sont modifiés. Cependant, le code ne plantera pas, manquez simplement la définition de 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));
}
}
Ce code permet de modifier l'arrière-plan de la barre de titre par programme dans Android. Changez la couleur en n'importe quelle couleur que vous voulez.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
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 le titre au lieu de la barre de titre, cela affectera toutes les activités de votre application
Je suppose que non. Vous pouvez créer une activité sans titre et créer votre propre barre de titre dans la mise en page de l'activité.
Vérifiez ceci , ligne 63 et ci-dessous:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
définit la vue personnalisée au lieu de la vue titre par défaut.
Jetez un œil au platforms/android-2.1/data/res/layout/screen.xml
SDK. Il semble y définir un titre. Vous pouvez fréquemment examiner des mises en page comme celle-ci et emprunter
style="?android:attr/windowTitleStyle"
styles que vous pouvez ensuite utiliser et remplacer dans vos propres TextViews.
Vous pourrez peut-être même sélectionner le titre pour un peaufinage direct en faisant:
TextView title = (TextView)findViewById(android.R.id.title);
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, c'est très utile: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
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.
Consultez 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" est défini dans votre res / values / colors.xml, par exemple:
<color name="titlebackgroundcolor">#0000AA</color>
)
Les choses semblent s'être améliorées / simplifiées depuis Android 5.0 (niveau d'API 21).
Je pense que ce que vous recherchez est quelque chose comme 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
Collez ce code après setContentView ou dans onCreate
si vous avez un code couleur, utilisez ceci;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
si vous voulez un code spécifique de la bibliothèque de couleurs, utilisez ceci;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));