无法在 ImageView 上使用 setForeground 方法 [重复]

Posted

技术标签:

【中文标题】无法在 ImageView 上使用 setForeground 方法 [重复]【英文标题】:Can't use setForeground method on ImageView [duplicate] 【发布时间】:2016-01-17 01:12:19 【问题描述】:

我想使用 setForeground 方法在我的 ImageView 的中心显示一个“播放”图标,以指示用户如果按下它就会播放视频。

目前我遇到了无法解决的错误:

虽然文档说该方法应该从 API 1 开始可用:

我正在使用 23.0.1 版构建工具针对 API 23 进行定位和编译。我的目标是最低 API 16。

【问题讨论】:

这个问题在这里已经有了答案:Why doesn't android:foreground attribute work? 【参考方案1】:

那是a documentation bug。 setForeground() 存在于 API 级别 1 的 FrameLayout 上;从 API 级别 23 开始,它仅在 View 上。

【讨论】:

好的,谢谢,在我的情况下,您对如何获取播放图标有什么建议吗?我目前正在考虑手动合并常规图像和前景图像可能是我唯一的选择,但也许我错过了一些东西。 @Saragis:即兴发挥,将“常规图像”作为ImageView 的背景图像,将播放图标作为ImageView 的实际图像 这个答案有点不正确。 java.lang.NoSuchMethodError: android.widget.ImageView.setForeground at kitkat(19). @bongjaechoe:正如我的回答所说,setForeground() 在 API 级别 23 上被添加到 View。您正试图在 API 级别 19 上使用它。API 级别 19 比 API 级别早几年出现23,所以 setForeground() 当时在 View 上不可用。 如果您将视图包裹在FrameLayout 中并在布局中使用setForground,警告将消失!【参考方案2】:

由于在 API 级别 1 中为 FrameLayout 添加了 setForeground 方法,作为一种解决方法,您可以将视图包装在 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_
    android:layout_>

    <ImageView
        android:id="@+id/niImageView"
        android:layout_
        android:layout_
        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));

【讨论】:

【参考方案3】:

你可以改变

minSdkVersion 16

minSdkVersion 23

import android.support.annotation.RequiresApi; 给你的班级和这份声明

@RequiresApi(api = Build.VERSION_CODES.M)

到您在其中使用setForground 方法的活动。

请注意,@RequiresApi(api = Build.VERSION_CODES.M) 中的 M 代表 API 23

您可以使用下面的每一项,每一项都代表一个特定的 API,而不是 M

基础 1 BASE_1_1 2 纸杯蛋糕 3 甜甜圈 4 埃克莱尔 5 ECLAIR_0_1 6 ECLAIR_MR1 7 FROYO 8 姜饼 9 姜饼_MR1 10 蜂窝 11 HONEYCOMB_MR1 12 HONEYCOMB_MR2 13 ICE_CREAM_SANDWICH 14 ICE_CREAM_SANDWICH_MR1 15 果冻豆 16 JELLY_BEAN_MR1 17 JELLY_BEAN_MR2 18 奇巧 19 KITKAT_WATCH 20 棒棒糖 21 LOLLIPOP_MR1 22 M 23 N 24 N_MR1 25 O 26 CUR_DEVELOPMENT 10000

【讨论】:

不,这是一个文档错误,就像之前的答案中提到的那样。 Google 应该会尽快修复它(希望如此)。

以上是关于无法在 ImageView 上使用 setForeground 方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法在 RemoteView Android 上更改 ImageView 资源

在 uiimageview 上无法识别点击手势

Swift 3 - 旋转图像在 ImageView 中无法正确显示

Autolayout 使 ScrollView 中的 ImageView 无法滚动

在android 5上设置ImageView colorFilter(api 21)

Android Lollipop 问题 - 无法将图像从相机加载到 ImageView