我正在用minSdkVersion = 15
编写一个Android应用程序(测试时间为19)。我希望在中间有一个小手机图片的叠加层。我从标准Android的图片中添加了drawable(xml)资源ic_smartphone_black_24dp
,并为叠加层创建了一个ImageView,如下所示:
<ImageView
android:id="@+id/overlay"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="1."
android:background="@drawable/overlay_full"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
这会渲染叠加层,但智能手机图片会拉伸到整个ImageView:
我试图以各种方式扩展手机的图片(阅读this,that和许多其他人),但没有一个工作。特别是我试过:
vectorDrawables.useSupportLibrary = true
添加到gradle.buildstatic {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
到活动
ImageView
更改为android.support.v7.widget.AppCompatImageView
(并在java代码中设置背景而不是在xml中)wrap_content
而不是0dp
作为layout_width/height
(并删除约束)overlay_full
中设置大小:<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/overlay_background">
<size
android:width="152dp"
android:height="152dp"/>
</item>
<item android:drawable="@drawable/ic_smartphone_black_24dp"
android:left="30dp"
android:top="30dp"
android:right="30dp"
android:bottom="30dp"
android:gravity="center"
android:scaleType="center"
android:width="30dp"
android:height="30dp">
<size
android:width="30dp"
android:height="30dp"/>
</item>
</layer-list>
代码在API 28中按预期工作,我也测试过。知道如何在早期的API版本中进行扩展吗?
你可以尝试这样的事情:
<ImageView
android:id="@+id/overlay"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
android:background="@drawable/just_the_background"
app:srcCompat="@drawable/ic_smartphone_black_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
此外,您不需要在布局中直接使用AppCompat
视图,只需让库为您处理(它们在构建时自动替换)。如果要扩展它们以添加自定义功能,则只需使用它们。