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