#android #xml #android-studio #android-layout
Вопрос:
Я создал градиент в своем файле ресурсов для рисования (.xml), а затем подключил его к кнопке (в activity_main.xml) предыстория. К сожалению, все структуры в этом файле не отображались на этой кнопке. Я новичок. Это проблема с кодом или что-то еще? Градиент работает как изображение и даже как переключатель, но не работает в качестве фона кнопки. Код от gradient.xml:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<item>
<shape>
<gradient
android:angle="90"
android:endColor="#b5b6d2"
android:startColor="#555994"
android:type="linear" />
<corners
android:radius="0dp"/>
<padding
android:right="10dp"
android:top="10dp"
android:bottom="10dp"
android:left="10dp"/>
</shape>
</item>
</selector>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@ id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/gradient"
android:text="@string/button"
android:textColor="@android:color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Ответ №1:
Вы используете селектор, когда хотите отобразить другой фон / цвет в соответствии с различными состояниями виджета . В вашем случае замените свой код этим кодом в вашем файле для рисования :
<?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:endColor="#b5b6d2"
android:startColor="#555994"
android:type="linear" />
<corners
android:radius="0dp"/>
</shape>
Исправление : Виджет кнопки принимает colorAccent в качестве фона по умолчанию .Странно, измените виджет на кнопку AppCompat, и это решит проблему.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
android:id="@ id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="Button"
android:background="@drawable/gradient"
android:textColor="@android:color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Комментарии:
1. Пожалуйста , измените кнопку на кнопку AppCompat, вы сможете увидеть градиентный фон . @Szymon. Обновил свой ответ .
2. Градиент прослушивается, он построен из цветовых блоков, я хочу, чтобы градиент был линейным.
3. В соответствии с вашим вопросом вы не смогли установить фон градиента для кнопки ? Это решено ? Градиент линейный, я исправил только рисование, я не изменил форму/градиент . Какой линейный градиент вы хотите ?
4. Спасибо. Я проверил аппаратное устройство, и градиент на самом деле правильный. На виртуальной машине это выглядело немного неправильно. Спасибо вам за вашу помощь. Хорошая работа! 🙂
5. Я рад, что это помогло 🙂
Ответ №2:
селекторы используются для изменения представления при изменении состояний. Вы не указали никаких состояний в своем селекторе, так что, вероятно, поэтому он не применяется.
Если вы хотите, чтобы градиент применялся во всех состояниях, затем удалите селектор и элемент в xml и просто укажите форму.
Комментарии:
1. Я пробовал это раньше, и это тоже не работает
2. Пожалуйста, добавьте эту строку android:форма=»прямоугольник» в теге формы вместо тега селектора . <форма android:форма=»прямоугольник»><форма android:форма=»прямоугольник»></форма>