无法在 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'tandroid: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 资源
Swift 3 - 旋转图像在 ImageView 中无法正确显示
Autolayout 使 ScrollView 中的 ImageView 无法滚动