Однажды (API <23) похоже, что <code>android:foreground будет работать только с FrameLayout
, как предлагает VicJordan.Однако для API 23+ android:foreground
будет работать для любого типа представления.См. этот выбор из View.java источника:
case R.styleable.View_foreground:
if (targetSdkVersion >= Build.VERSION_CODES.M || this instanceof FrameLayout) {
setForeground(a.getDrawable(attr));
}
Вот пример android:foreground
, работающего над API 28 со следующим макетом:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="@drawable/ic_launcher_foreground"
android:src="@android:drawable/ic_delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
![enter image description here](https://i.stack.imgur.com/tGUzy.png)
Тем не менее, в API 22 мы видим это:
![enter image description here](https://i.stack.imgur.com/qmWo9.png)
Нет изображения переднего плана.Таким образом, android:foreground
работает только при уровне API 23+.Я согласен, что это на самом деле не задокументировано, но так оно и есть.
Обновление: API 23, похоже, имеет проблему с android:foreground
, так что давайте скажем android:foreground
работает с API 24+ для общих видов.
Второе обновление: Наткнулся на пару других постов, посвященных этой же проблеме, касающихся setForeground()
здесь и здесь .В принятом ответе на второй вопрос CommonsWare определяет это как «ошибку документации».