我有两个不同的Drawables
,需要在运行时合并并获取一个单独的Drawable
。我希望第一个Drawable
在顶部,另一个在底部。我发现了LayerDrawable
,看起来正是我所需的,但我在尝试排列Drawables
时遇到了麻烦。
我有一个ImageButton
,大小为48x48 dp
,这是最终Drawable
的位置。第一个Drawable
是加号按钮(20x20 dp
),第二个是位于加号按钮下方的小点(4x4 dp
)。
加号按钮Drawable
使用字体图形加载。我正在使用此 XML 片段创建点按钮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);
以上代码片段最终使圆点放置在正确的位置,但它还开始影响加号按钮的位置和大小,最终看起来像这样:![enter image description here](https://istack.dev59.com/8ki5V.webp)
ImageButton
的中心,并将加号图标放在其正下方。有人知道我错在哪里以及如何正确定位这两个可绘制对象吗?PS:我的应用程序支持API 15+,因此无法使用LayerDrawable
API的许多方法,例如setLayerGravity
、'setPaddingMode等。
setLayerGravity
仅适用于API 23及以上版本。我的应用程序支持API 15及以上版本。 - akshayt23ImageButton
内的相对位置取决于点的大小。 有没有办法让我将加号图标定位在正中心(Gravity.CENTER),并将点图标放在其下方4个dp
的位置? - akshayt23