所以我有两个不同Drawables
的,我需要在运行时合并并得到一个Drawable
。我希望第一个Drawable
在顶部,另一个在底部。我遇到了LayerDrawable
,它看起来正是我需要的,但我在尝试安排Drawables
.
所以我有一个ImageButton
48x48 的尺寸dp
,这就是决赛Drawable
的去向。第一个Drawable
是加号按钮 (20x20 dp
),第二个是dp
加号按钮下方的一个小点 (4x4 )。
加号按钮Drawable
是使用字体字形加载的。我正在Drawable
使用这个 xml 片段创建点按钮:
<?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
to try and position the two 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);
上面的代码片段最终将点放置在正确的位置,但它也开始影响加号按钮的位置和大小,最终看起来像这样:
但我真正想要的是在中间有加号按钮,在ImageButton
它下面有加号图标。有谁知道我哪里出错了,我怎样才能正确定位两个drawable?
PS:我的应用程序支持 API 15+,所以我不能使用来自LayerDrawable
API 的一堆方法,比如setLayerGravity
`setPaddingMode 等。