Подтвердить что ты не робот

Android-приложение для переноски для Android: srcCompat не показывает изображения

Я использую библиотеку поддержки для отображения векторных изображений на андроиде kitkat. Когда я тестирую свое приложение на эмуляторе, я не вижу ни одного из этих изображений. Я сделал отдельный макет для android lollipop и выше, и он отлично работает (я думаю, потому что я использую атрибут src вместо srcCompat Здесь код, где я использую библиотеку поддержки

<LinearLayout android:layout_alignParentBottom="true"
android:id="@+id/lake_detail"
android:background="@drawable/my_fishing_plan_footer_line"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="90dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
            android:layout_marginRight="3dp"
            android:id="@+id/fire_logo"
            android:layout_width="20sp"
            android:layout_height="20sp">

            <ImageView
                android:tint="#d74313"
                app:srcCompat="@drawable/circle_icon"
                android:layout_width="30sp"
                android:layout_height="30sp" />

            <ImageView
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                app:srcCompat="@drawable/lauzaviete"
                android:layout_width="25dp"
                android:layout_height="25dp" />

        </RelativeLayout>

и это странно, потому что я вижу изображения в окне предварительного просмотра студии Android.

4b9b3361

Ответ 1

Оригинальный ответ

Используйте android.support.v7.widget.AppCompatImageView вместо ImageView в макете, например так:

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

  <android.support.v7.widget.AppCompatImageView
    android:tint="#d74313"
    app:srcCompat="@drawable/circle_icon"
    android:layout_width="30sp"
    android:layout_height="30sp" />

  <android.support.v7.widget.AppCompatImageView
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    app:srcCompat="@drawable/lauzaviete"
    android:layout_width="25dp"
    android:layout_height="25dp" />
</LinearLayout>

Смотрите документы AppCompatImageView здесь и app:srcCompat здесь.

Также обязательно сделайте следующее:

Настройте свой build.gradle

android {
  defaultConfig {
    vectorDrawables {
      useSupportLibrary = true
    }
  }
}

Документы: https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html#com.android.build.gradle.internal.dsl.VectorDrawablesOptions: useSupportLibrary

Расширьте свою Activity с AppCompatActivity

public final class MainActivity extends AppCompatActivity {    
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  }
}

При использовании app:srcCompat убедитесь, что в app:srcCompat правильные объявления:

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</LinearLayout>

Необязательно (предупреждение: пожалуйста, прочитайте документы): setCompatVectorFromResourcesEnabled в вашем классе Application

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

Документы: https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html#setCompatVectorFromResourcesEnabled(boolean)

Ответ 2

У меня была аналогичная проблема, и после выполнения всех шагов из Джаред Берроуз ответ проблема не была решена.

Оказывается, что пространство имен "приложение" внутри моего файла макета было установлено как:

xmlns:app="http://schemas.android.com/tools"

вместо:

xmlns:app="http://schemas.android.com/apk/res-auto"

После этого проблема была исправлена.

Ответ 3

Реализация и app:srcCompact а затем вы можете использовать его в ImageView

implementation 'com.android.support:appcompat-v7:28.0.0'

Убедитесь, что вы используете правильную версию.

Затем в вашем build.gradle установите android.defaultConfig.vectorDrawables.useSupportLibrary = true

defaultConfig {

    //...

    vectorDrawables {
        useSupportLibrary true
    }
}

Ответ 4

использование:

android:background="@drawable/circle_icon"

вместо:

app:srcCompat="@drawable/circle_icon"

Ответ 5

Дополнительно убедитесь, что ваши векторные рисунки расположены в drawable а не в drawable-anydpi.

Я часто сталкиваюсь с проблемами, если графика находится в папке drawable-anydpi.

Ответ 6

В итоге:

  1. Поместите векторную поддержку рисования в ваш модуль (build.gradle)

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
  2. Вместо android:src="@drawable/icon" используйте app:srcCompat="@drawable/icon"

  3. Убедитесь, что ваша Activity extends AppCompatActivity без этого шага невозможно отобразить векторное изображение с помощью app:srcCompat

Ответ 7

Если кто-то еще сталкивается с этой проблемой и использует androidx, попробуйте использовать androidx.appcompat.widget.AppCompatImageView