Android LinearLayout градиентный фон - PullRequest
228 голосов
/ 12 мая 2011

У меня проблемы с применением градиентного фона к LinearLayout.

Это должно быть относительно просто из того, что я прочитал, но, похоже, это не работает.Для справки я разрабатываю на 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>

Если я изменю @ drawable / header_bgк цвету - например, # FF0000, он отлично работает.Я что-то упускаю здесь очевидное?

Ответы [ 7 ]

384 голосов
/ 13 мая 2011

Хорошо, мне удалось решить эту проблему с помощью селектора.См. Код ниже:

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>

Надеюсь, это поможет кому-то, у кого возникла такая же проблема.

64 голосов
/ 23 сентября 2015

Также возможно иметь третий цвет (в центре).И различные виды фигур.

Например, в drawable / radius.xml:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#000000"
        android:centerColor="#5b5b5b"
        android:endColor="#000000"
        android:angle="0" />
</shape>

Это дает вам черный - серый - черный (слева направо), который является моим любимым темным фоном.,

Не забудьте добавить градиент.xml в качестве фона в макете xml:

android:background="@drawable/gradient"

Также возможно вращение с помощью:

angle = "0"

дает вертикальную линию

, а с

angle =" 90 "

дает горизонтальнуюлиния

Возможные углы:

0, 90, 180, 270.

Также существует несколько различных видов фигур:

android: shape = "rectangle"

Округлая форма:

android: shape = "oval"

ивероятно, еще несколько.

Надеюсь, это поможет, ура!

31 голосов
/ 02 мая 2017

В XML Drawable File:

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

В вашем файле макета: android: background = "@ drawable / градиент_background"

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/gradient_background"
        android:orientation="vertical"
        android:padding="20dp">
        .....

</LinearLayout>

enter image description here

18 голосов
/ 12 мая 2011

Попробуйте удалить андроид: градиентRadius = "90".Вот тот, который работает для меня:

<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>
6 голосов
/ 06 июня 2013

Моя проблема заключалась в том, что расширение .xml не было добавлено к имени файла вновь созданного XML-файла. Добавление расширения .xml устранило мою проблему.

1 голос
/ 27 октября 2016

Я не знаю, поможет ли это кому-нибудь, но моя проблема заключалась в том, что я пытался установить градиент для свойства "src" ImageView примерно так:

<ImageView 
    android:id="@+id/imgToast"
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    android:src="@drawable/toast_bg"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"/>

Не уверен на 100%, почему это не сработало, но теперь я изменил его и поместил drawable в свойство «background» родительского объекта ImageView, которое в моем случае является RelativeLayout, например: (это работало успешно)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/custom_toast_layout_id"
    android:layout_height="match_parent"
    android:background="@drawable/toast_bg">
0 голосов
/ 24 ноября 2011

Я бы проверил ваш альфа-канал на ваши цвета градиента.Для меня, когда я тестировал свой код, у меня был неправильно настроен альфа-канал на цветах, и он не работал для меня.Как только я установил альфа-канал, все заработало!

...