android: fillType = "evenOdd" не работает в API 23 - векторное рисование Любое альтернативное решение? - PullRequest
0 голосов
/ 18 декабря 2018

Есть ли альтернативное решение?

Код векторного рисования

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:pathData="M6.5,22.4235L17.995,22.4235L17.995,10.9285L6.5,10.9285L6.5,22.4235ZM8.068,6.6785C8.068,4.3745 9.943,2.4995 12.247,2.4995C14.551,2.4995 16.426,4.3745 16.426,6.6785L16.426,9.4285L8.068,9.4285L8.068,6.6785ZM11.4971,16.6426C10.7691,16.3456 10.2551,15.6336 10.2551,14.7986C10.2551,13.6996 11.1471,12.8076 12.2471,12.8076C13.3481,12.8076 14.2391,13.6996 14.2391,14.7986C14.2391,15.6336 13.7261,16.3456 12.9971,16.6426L12.9971,19.8826L11.4971,19.8826L11.4971,16.6426ZM17.926,9.4285L17.926,6.6785C17.926,3.5475 15.378,0.9995 12.247,0.9995C9.116,0.9995 6.568,3.5475 6.568,6.6785L6.568,9.4285L5,9.4285L5,23.9235L19.495,23.9235L19.495,9.4285L17.926,9.4285Z"
      android:strokeWidth="1"
      android:fillColor="#000000"
      android:fillType="evenOdd"
      android:strokeColor="#00000000"/>
</vector>

gradle:

 minSdkVersion = 21
    targetSdkVersion = 28
    compileSdkVersion = 28

Атрибут fillType используется только в API уровня 24 и выше (текущий минимум равен 1) меньше ... (⌘F1)

Эта проверка находит атрибуты, установленные в файлах XML, которые были введены в версии, более новой, чем самая стараяверсия, на которую ориентировано ваше приложение (с атрибутом minSdkVersion).Это не ошибка;приложение просто проигнорирует атрибут.

Однако, если атрибут важен для внешнего вида или функциональности вашего приложения, вам следует подумать о том, чтобы найти альтернативный способ достижения того же результата только с доступными атрибутами, а затем вы можете дополнительно создать копию макета.в папке layout-vNN, которая будет использоваться в API NN или выше, где вы можете воспользоваться более новым атрибутом.Примечание:

Эта проверка относится не только к атрибутам.Например, некоторые теги также могут быть неиспользованными, например, новый элемент в макетах, представленный в API 21. Идентификатор проблемы: UnusedAttribute enter image description here

warning

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Это решение, которое я использовал для решения этой проблемы.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:pathData="M6.5,10.9235L17.995,10.9235L17.995,22.385L6.5,22.385L6.5,22.4235ZM8.068,6.6785C8.068,4.3745 9.943,2.4995 12.247,2.4995C14.551,2.4995 16.426,4.3745 16.426,6.6785L16.426,9.4285L8.068,9.4285L8.068,6.6785ZM11.4971,16.6426C10.7691,16.3456 10.2551,15.6336 10.2551,14.7986C10.2551,13.6996 11.1471,12.8076 12.2471,12.8076C13.3481,12.8076 14.2391,13.6996 14.2391,14.7986C14.2391,15.6336 13.7261,16.3456 12.9971,16.6426L12.9971,19.8826L11.4971,19.8826L11.4971,16.6426ZM17.926,9.4285L17.926,6.6785C17.926,3.5475 15.378,0.9995 12.247,0.9995C9.116,0.9995 6.568,3.5475 6.568,6.6785L6.568,9.4285L5,9.4285L5,23.9235L19.495,23.9235L19.495,9.4285L17.926,9.4285Z"
      android:strokeWidth="1"
      android:fillColor="#000000"
      android:strokeColor="#00000000"/>
</vector>
0 голосов
/ 14 января 2019

Я думаю, что основной причиной является то, что вы установили minSdkVersion в 21, что не поддерживает evenOdd (и игнорируется сборкой gradle).

Самое простое решение: установите minSdkVersion в 24, чтобы дажеOdd былоиспользоваться для генерации изображения.

Или же вам нужно экспортировать SVG с ненулевым значением fillType.Для получения более подробной информации см. Тайна исчезающих дыр - захватывающий рассказ об использовании SVG в Android

...