当我使用内部带有vector-drawable的图层列表时,它在API 23+上可以正常工作,但不是在以前。
我启用了vectorDrawables.useSupportLibrary = true
和AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
,但是可绘制对象却非常拉伸。
左为Oreo 26,右为Lollipop 21
这是可绘制对象
<layer-list>
<item>
<shape>
<stroke android:width="0.9dp" android:color="@color/colorPrimaryDark" />
<solid android:color="#FFF" />
<corners android:radius="16dp" />
</shape>
</item>
<item android:drawable="@drawable/arrow_drawable" android:gravity="center_vertical|left" android:left="18dp" />
</layer-list>
这是可绘制对象的应用
<Spinner
android:id="@+id/countrySpinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/spinner_background"
android:popupBackground="@drawable/spinner_dropdown_background"
android:popupElevation="4dp"
app:popupTheme="@style/PopupTheme"
app:layout_constraintBottom_toTopOf="@id/citySpinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.8" />
它在ConstraintLayout中,但是我不能发布整个布局文件。
我该如何解决可扩展的Pre API 23? 在代码中创建整个图层列表会有所不同吗?
编辑:我之前曾经尝试过,但是忘记添加了。 我确实尝试了以下xml
<layer-list>
<item>
<shape>
<stroke android:width="0.9dp" android:color="@color/colorPrimaryDark"/>
<solid android:color="#FFF"/>
<corners android:radius="16dp"/>
</shape>
</item>
<item android:left="18dp">
<bitmap android:src="@drawable/arrow_drawable" android:gravity="center_vertical|left"/>
</item>
</layer-list>
但这会使应用程序在开始说android.content.res.Resources$NotFoundException: File res/drawable/spinner_background.xml from drawable resource ID #0x7f0700de
时崩溃,这可能不是很有意义。这就是Android Studio中的预览显示的内容
答案 0 :(得分:0)
不确定,但也许
app:layout_constraintWidth_percent="0.8"
和
android:layout_width="0dp"
使宽度占其父级的80%
答案 1 :(得分:0)
documentation for layer-list
drawables指出:
默认情况下,所有可绘制项目的大小都会缩放到适合包含View的大小。因此,将图像放置在图层列表中的不同位置可能会增加“视图”的大小,并且某些图像会适当缩放。为了避免缩放列表中的项目,请在
nsim
元素内使用<bitmap>
元素来指定可绘制对象,并将重力定义为不可缩放的对象,例如<item>
。
尝试一下:
"center"