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.
Ответы
Ответ 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
В итоге:
-
Поместите векторную поддержку рисования в ваш модуль (build.gradle)
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
-
Вместо android:src="@drawable/icon"
используйте app:srcCompat="@drawable/icon"
-
Убедитесь, что ваша Activity extends AppCompatActivity
без этого шага невозможно отобразить векторное изображение с помощью app:srcCompat
Ответ 7
Если кто-то еще сталкивается с этой проблемой и использует androidx, попробуйте использовать androidx.appcompat.widget.AppCompatImageView