Растягивается вектор внутри Drawer-списка - PullRequest
1 голос
/ 18 апреля 2019

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

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

Left is Oreo 26 and right is Lollipop 21

Слева - 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 API23?Будет ли создание всего списка слоев в коде другим?

Редактировать: Я пробовал это раньше, но забыл добавить его.Я попробовал следующее 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 Studio

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Документация для layer-list чертежей гласит:

По умолчанию все рисуемые элементы масштабируются по размеру вмещающего просмотра. Таким образом, размещение ваших изображений в списке слоев в разных позициях может увеличить размер представления и масштабировать некоторые изображения в зависимости от ситуации. Чтобы избежать масштабирования элементов в списке, используйте элемент <bitmap> внутри элемента <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 голосов
/ 18 апреля 2019

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

app:layout_constraintWidth_percent="0.8" 

и

android:layout_width="0dp"

Заставить ширину занять 80% от своего родителя

...