280 votes

Android LinearLayout Fond dégradé

J'ai du mal à appliquer un arrière-plan en dégradé à un LinearLayout.

Cela devrait être relativement simple d'après ce que j'ai lu, mais cela ne semble pas fonctionner. À titre de référence, je développe sur la version 2.1-update1.

header_bg.xml :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:startColor="#FFFF0000"
        android:endColor="#FF00FF00"
        android:type="linear"/>
</shape>

main_header.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:orientation="horizontal"
    android:background="@drawable/header_bg">
</LinearLayout>

Si je remplace @drawable/header_bg par une couleur, par exemple #FF0000, tout fonctionne parfaitement. Est-ce que quelque chose d'évident m'échappe ici ?

0 votes

Android:backgroundTint Android:backgroundTintMode stackoverflow.com/a/43341289/3209132

447voto

Genesis Points 1844

Ok, j'ai réussi à résoudre ce problème en utilisant un sélecteur. Voir le code ci-dessous :

main_header.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:orientation="horizontal"
    android:background="@drawable/main_header_selector">
</LinearLayout>

main_header_selector.xml :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape>
        <gradient
            android:angle="90"
            android:startColor="#FFFF0000"
            android:endColor="#FF00FF00"
            android:type="linear" />
    </shape>
</item>
</selector>

J'espère que cela aidera quelqu'un qui a le même problème.

5 votes

Super. Pour info, voir les autres types de dégradés : developer.Android.com/reference/Android/graphics/drawable/

20voto

MarvinLabs Points 13401

Essayez de supprimer Android:gradientRadius="90". En voici une qui fonctionne pour moi :

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
>
    <gradient
        android:startColor="@color/purple"
        android:endColor="@color/pink"
        android:angle="270" />
</shape>

0 votes

Malheureusement, cela ne fonctionne pas pour moi. J'ai mis à jour la question originale avec ce que j'ai maintenant.

0 votes

Cela ne fonctionne-t-il toujours pas lorsque vous ajoutez un widget dans la mise en page (par exemple un TextView ?)?

0 votes

Correct - cela ne fonctionne toujours pas avec un TextView dans le layout. Encore une fois, si j'applique une couleur statique plutôt qu'un drawable, cela fonctionne très bien. J'ai remarqué qu'il est possible (parfois) de le faire fonctionner en utilisant un sélecteur, mais cela ne devrait pas être nécessaire d'après ce que j'ai compris.

6voto

kwahn Points 198

Le problème était que l'extension .xml n'était pas ajoutée au nom de fichier du fichier XML nouvellement créé. L'ajout de l'extension .xml a réglé mon problème.

0voto

thebigdog Points 411

Je vérifierais votre canal alpha sur vos couleurs dégradées. Pour moi, lorsque je testais mon code, le canal alpha était mal réglé sur les couleurs et cela n'a pas fonctionné. Une fois que j'ai réglé le canal alpha, tout a fonctionné !

0voto

Chloe Points 2737

Comment ça, ça ne marche pas ? Est-ce qu'il se plante ? Essayez ant clean puis redéployer. Cela a réglé mon problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X