Il existe de nombreux didacticiels et des questions sur SO qui implémentent des barres de titre personnalisées. Cependant, dans ma barre de titre personnalisée, j'ai un dégradé personnalisé pour l'arrière-plan et je voudrais savoir comment le définir dynamiquement dans mon code.
Voici où ma barre de titre personnalisée est appelée:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.foo_layout);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar);
Et c'est mon custom_title_bar
:
<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="@layout/custom_title_bar_background_colors">
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/title_bar_logo"
Android:gravity="center_horizontal"
Android:paddingTop="0dip"/>
</LinearLayout>
Comme vous pouvez le voir, l'arrière-plan de la disposition linéaire est défini par ce type:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
Android:startColor="#616261"
Android:endColor="#131313"
Android:angle="270"
/>
<corners Android:radius="0dp" />
</shape>
Ce que je voudrais faire, c'est définir ces couleurs dégradées dynamiquement dans mon code. Je ne veux pas les coder en dur dans mon fichier XML comme ils le sont actuellement.
Je suis ouvert à toutes les idées si vous avez une meilleure façon de définir un dégradé de fond.
Merci d'avance!!
Pour ce faire dans le code, vous créez un GradientDrawable.
La seule chance de régler l'angle et la couleur est dans le constructeur. Si vous souhaitez modifier la couleur ou l'angle, créez simplement un nouveau GradientDrawable et définissez-le comme arrière-plan
View layout = findViewById(R.id.mainlayout);
GradientDrawable Gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[] {0xFF616261,0xFF131313});
Gd.setCornerRadius(0f);
layout.setBackgroundDrawable(Gd);
Pour que cela fonctionne, j'ai ajouté un identifiant à votre LinearLayout principal comme suit
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/mainlayout"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/title_bar_logo"
Android:gravity="center_horizontal"
Android:paddingTop="0dip"/>
</LinearLayout>
Et pour l'utiliser comme pour une barre de titre personnalisée
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title_bar);
View title = getWindow().findViewById(R.id.mainlayout);
title.setBackgroundDrawable(Gd);