Когда я использую список слоев с векторным рисунком внутри, он отлично работает на API 23+, но не ранее.
Я включил vectorDrawables.useSupportLibrary = true
и AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
, но рисование очень растягивается.
Слева - Oreo 26, а справа - Lollipop 21
Это нарисовано
<layer-list>
<item>
<shape>
<stroke android:width="0.9dp" android:color="@color/colorPrimaryDark" />
<solid android:color="#FFF" />
<corners android:radius="16dp" />
</shape>
</item>
<item android:drawable="@drawable/arrow_drawable" android:gravity="center_vertical|left" android:left="18dp" />
</layer-list>
И здесь применяется рисование
<Spinner
android:id="@+id/countrySpinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/spinner_background"
android:popupBackground="@drawable/spinner_dropdown_background"
android:popupElevation="4dp"
app:popupTheme="@style/PopupTheme"
app:layout_constraintBottom_toTopOf="@id/citySpinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.8" />
Это внутри ConstraintLayout, но я не могу опубликовать весь файл макета.
Что я могу сделать, чтобы исправить растяжение Pre API 23? Будет ли создание всего списка слоев в коде другим?
Изменить: я пробовал раньше, но забыл добавить. Я попробовал следующий XML
<layer-list>
<item>
<shape>
<stroke android:width="0.9dp" android:color="@color/colorPrimaryDark"/>
<solid android:color="#FFF"/>
<corners android:radius="16dp"/>
</shape>
</item>
<item android:left="18dp">
<bitmap android:src="@drawable/arrow_drawable" android:gravity="center_vertical|left"/>
</item>
</layer-list>
Но это android.content.res.Resources$NotFoundException: File res/drawable/spinner_background.xml from drawable resource ID #0x7f0700de
к сбою приложения, как только оно начинает говорить android.content.res.Resources$NotFoundException: File res/drawable/spinner_background.xml from drawable resource ID #0x7f0700de
что, вероятно, не имеет android.content.res.Resources$NotFoundException: File res/drawable/spinner_background.xml from drawable resource ID #0x7f0700de
смысла. И это то, что показывает предварительный просмотр в Android Studio
Документация для рисования layer-list
гласит:
По умолчанию все рисуемые элементы масштабируются по размеру вмещающего просмотра. Таким образом, размещение ваших изображений в списке слоев в разных позициях может увеличить размер представления и масштабировать некоторые изображения в зависимости от ситуации. Чтобы избежать масштабирования элементов в списке, используйте элемент
<bitmap>
внутри элемента<item>
чтобы указать<item>
рисования и определить гравитацию для чего-то, что не масштабируется, например,"center"
.
Попробуйте это:
<layer-list>
<item>
<shape>
<stroke android:width="0.9dp" android:color="@color/colorPrimaryDark" />
<solid android:color="#FFF" />
<corners android:radius="16dp" />
</shape>
</item>
<item android:left="18dp">
<bitmap
android:src="@drawable/arrow_drawable"
android:gravity="center_vertical|left"/>
</item>
</layer-list>
Не уверен, но возможно
app:layout_constraintWidth_percent="0.8"
а также
android:layout_width="0dp"
Сделайте так, чтобы ширина занимала 80% от его родителя.