Home » Android » android – Can't use setForeground method on ImageView

android – Can't use setForeground method on ImageView

Posted by: admin May 14, 2020 Leave a comment

Questions:

I want to use the setForeground method to show a “play” icon in the center of my ImageView to indicate the user that a video will play if they press it.

Currently I’m having this error which I cannot solve:

enter image description here

Although the documentation says the method should be available since API 1:

enter image description here

I’m targeting and compiling against API 23 with build tools version 23.0.1. I’m targeting min API 16.

How to&Answers:

That is a documentation bug. setForeground() existed on FrameLayout from API Level 1; it is only on View as of API Level 23.

Answer:

Since the setForeground method was added for the FrameLayout in API Level 1, as a workaround you can wrap your view inside a FrameLayout then use the setForeground method to the layout, it will work, eg:

in your 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>

Then in code, use:

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

Answer:

You can either change

minSdkVersion 16

with

minSdkVersion 23

or import android.support.annotation.RequiresApi;
to your class and this statement

@RequiresApi(api = Build.VERSION_CODES.M)

to the activity you used setForground method in it.

Note that M in @RequiresApi(api = Build.VERSION_CODES.M) stands for API 23

and you can use each one of the items below that each one stand for a specific API instead of M

BASE 1
BASE_1_1 2
CUPCAKE 3
DONUT 4
ECLAIR 5
ECLAIR_0_1 6
ECLAIR_MR1 7
FROYO 8
GINGERBREAD 9
GINGERBREAD_MR1 10
HONEYCOMB 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
M 23
N 24
N_MR1 25
O 26
CUR_DEVELOPMENT 10000