Как раздуть макет, содержащий векторную иконку для рисования?

#android #layout #kotlin #androidx

#Android #макет #kotlin #androidx

Вопрос:

Я хочу раздуть, layout содержащий ImageView , с vector xml возможностью рисования фона.

 val view = LayoutInflater.from(parent.context).inflate(R.layout.my_layout, parent, false)
  

Но это вызовет исключение:

 android.view.InflateException: Binary XML file line #72: Binary XML file line #72: Error inflating class ImageView
        at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        ...
  

Я пытался переместить значок для рисования в res/drawable-v21/ но, похоже, это проблема с LayoutInflater самим собой.

Я пытался использовать androidx.appcompat.widget.AppCompatImageView вместо ImageView , но это не сработало.

Просмотр изображений:

 <ImageView
    android:id="@ id/layout_ico"
    android:layout_width="@dimen/t_icon_size"
    android:layout_height="@dimen/t_icon_size"
    android:background="@drawable/vector_ico"/>
  

Векторная иконка (пример xml — невозможно разместить точную иконку):

 <vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600" >
    <group
        android:name="rotationGroup"
        android:pivotX="300.0"
        android:pivotY="300.0"
        android:rotation="45.0" >
        <path
            android:name="vectorPath"
            android:fillColor="#000000"
            android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
</vector>
  

Комментарии:

1. опубликуйте свой XML-файл

2. мартин, покажите ваши gradle.build, gradle.properties и тему, которую вы используете, и последний раз проверьте, находится ли ваша иконка в папке для рисования, а не в drawable 24 и т.д.

Ответ №1:

Обновляли ли вы свой файл gradle при использовании AppCompatImageView?

 defaultConfig {
   ...
   vectorDrawables.useSupportLibrary = true
}
  

И в вашем макете

 <androidx.appcompat.widget.AppCompatImageView
    ... 
app:srcCompat="@drawable/something" />
  

Комментарии:

1. Просто используйте androidx.appcompat.widget. Просмотрите appcompatimageи выберите свой вариант рисования с помощью srcCompat <androidx.appcompat.widget. AppCompatImageView … приложение: srcCompat=»@drawable / что-то» />

Ответ №2:

Кроме включения следующей строки в ваш файл gradle:

 defaultConfig {
 ...
 vectorDrawables.useSupportLibrary = true
}
  

Вам также необходимо добавить следующую строку в свой класс приложения:

 class App : Application() {

override fun onCreate() {
    super.onCreate()
    ...
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
}
  

}