Не могу использовать метод setForeground в ImageView

Я хочу использовать метод setForeground, чтобы отобразить значок воспроизведения в центре моего ImageView, чтобы указать пользователю, что видео будет воспроизводиться, если они нажмут на него.

В настоящее время у меня есть эта ошибка, которую я не могу решить:

Хотя в документации сказано, что метод должен быть доступен начиная с API 1:

Я нацеливаюсь на API 23 и собираю его с помощью инструментов сборки версии 23.0.1. Я нацеливаюсь на мин API 16.

2 ответа

Решение

Это ошибка документации. setForeground() существовал на FrameLayout от уровня API 1; это только на View на уровне API 23.

Так как setForeground метод был добавлен для FrameLayout на уровне API 1, в качестве обходного пути вы можете обернуть ваше представление внутри FrameLayout затем используйте setForeground Метод с макетом, он будет работать, например:

в вашем xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fl_item_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/niImageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@string/imageView_description"
        android:scaleType="fitCenter"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</FrameLayout>

Затем в коде используйте:

holder.flItemContainer.setForeground(ContextCompat.getDrawable(a, R.drawable.play));

Вы можете изменить

minSdkVersion 16

с

minSdkVersion 23

или же import android.support.annotation.RequiresApi;
к вашему классу и это утверждение

@RequiresApi(api = Build.VERSION_CODES.M)

к деятельности, которую вы использовали setForground метод в этом.

Обратите внимание, что M в @RequiresApi(api = Build.VERSION_CODES.M) выступает за API 23

и вы можете использовать каждый из пунктов ниже, каждый из которых обозначает определенный API вместо M

БАЗА 1
BASE_1_1 2
Кекс 3
ПОНЯТЬ 4
Эклер 5
ECLAIR_0_1 6
ECLAIR_MR1 7
ФРОЙО 8
Имбирь 9
GINGERBREAD_MR1 10
МЕДОВАЯ КОМБИНАЦИЯ 11
HONEYCOMB_MR1 12
HONEYCOMB_MR2 13 ICE_CREAM_SANDWICH 14
ICE_CREAM_SANDWICH_MR1 15
JELLY_BEAN 16
JELLY_BEAN_MR1 17
JELLY_BEAN_MR2 18
KITKAT 19
KITKAT_WATCH 20
LOLLIPOP 21 LOLLIPOP_MR1 22
М 23
N 24
N_MR1 25
O 26
CUR_DEVELOPMENT 10000

Другие вопросы по тегам