【发布时间】:2017-12-22 11:52:05
【问题描述】:
所以我有两个不同的Drawables,我需要在运行时合并并获得一个Drawable。我希望第一个 Drawable 位于顶部,另一个位于底部。我遇到了LayerDrawable,它看起来正是我需要的,但我在尝试安排Drawables 时遇到了麻烦。
所以我有一个 ImageButton,它是 48x48 dp,这就是最终的 Drawable 所在的位置。第一个 Drawable 是加号按钮 (20x20 dp),第二个是加号按钮下方的小圆点 (4x4 dp)。
加号按钮Drawable 使用字体字形加载。我正在使用这个 xml sn-p 创建点按钮Drawable:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@color/white_40"/>
<size
android:width="4dp"
android:height="4dp"/>
</shape>
我的第一种方法是将Drawables 添加到LayerDrawable,但是当我这样做时,xml 中指定的点的宽度/高度属性将被忽略,它会延伸以覆盖加号图标。
LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
我尝试的第二种方法是使用setLayerInset 尝试定位两个Drawables。
LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
finalDrawable.setLayerInset(0, 0, 0, 0, 0);
finalDrawable.setLayerInset(1, dp(22), dp(44), dp(22), 0);
上面的代码 sn-p 最终将点放置在正确的位置,但它也开始影响加号按钮的位置和大小,最终看起来像这样:
但我真正想要的是在ImageButton 的中心添加加号按钮,并在其下方添加加号图标。有谁知道我哪里出了问题以及如何正确定位两个可绘制对象?
PS:我的应用支持 API 15+,所以我不能使用 LayerDrawable 的 API 中的一堆方法,例如 setLayerGravity、`setPaddingMode 等。
【问题讨论】:
标签: android android-layout drawable android-drawable layerdrawable