Android 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 ответов


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

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>

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


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

например, в drawable / gradient.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>

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

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

android:background="@drawable/gradient"

также возможно вращать, с:

угол="0"

дает вам вертикальная линия

и

угол="90"

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

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

0, 90, 180, 270.

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

android: shape= "прямоугольник"

округлую форму:

android: shape= "овал"

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

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


Попробуйте удалить android: gradientRadius= "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>

в XML Drawable файле:

<?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 / gradient_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


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


Я не знаю, поможет ли это кому-нибудь, но моя проблема заключалась в том, что я пытался установить градиент на свойство "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">

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