Вектор Drawable внутри Layer-List растягивается

1

Когда я использую список слоев с векторным рисунком внутри, он отлично работает на API 23+, но не ранее.

Я включил vectorDrawables.useSupportLibrary = true и AppCompatDelegate.setCompatVectorFromResourcesEnabled(true), но рисование очень растягивается.

Изображение 174551

Слева - 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

Изображение 174551

Теги:
android-vectordrawable

2 ответа

0

Документация для рисования 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>
  • 0
    Это создает исключение при запуске, а также в окне предварительного просмотра редактора отображается изображение ошибки
  • 0
    Что за исключение? Какую ошибку андроид студия показывает в превью (если нажать на красную иконку! В правом верхнем углу)?
Показать ещё 3 комментария
0

Не уверен, но возможно

app:layout_constraintWidth_percent="0.8" 

а также

android:layout_width="0dp"

Сделайте так, чтобы ширина занимала 80% от его родителя.

  • 0
    Да, но это не имеет ничего общего с растягиванием вытягиваемого материала.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню