使用图层列表定义一个带有一半高度项目的可绘制对象

4
我已经在我的drawable文件夹中实现了以下按钮样式:
<layer-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        >
        <item>
            <shape
                android:shape="rectangle"
                >
                <stroke android:width="1dp" android:color="#FF666666" />
                <corners
                    android:radius="@dimen/corner_radius" 
                    />
                <solid
                    android:color="#FF000000" 
                    />  
            </shape>
        </item>
        <item
            android:bottom="22dp" android:top="1dp" android:left="1dp" android:right="1dp"
            >
            <shape
                android:shape="rectangle"
                >
                <corners
                    android:topLeftRadius="@dimen/corner_radius" android:topRightRadius="@dimen/corner_radius" 
                    />
                <solid
                    android:color="#10FFFFFF" 
                    />
            </shape>            
        </item>
    </layer-list>

我的问题是我想要相对于高度的一半设置第二个项目,而不是绝对值。您可以看到,我在这里使用'android:bottom="22dp"'进行设置,因为我的按钮通常高度为45dp。然而,无论我的按钮高度是多少,我都希望第二个项目始终位于一半的高度。有什么想法吗?

2个回答

3

在 @Tyler 的帮助下,我找到了一种更简单的方法来完成这个任务:

LayerDrawable layerList = (LayerDrawable)getResources().getDrawable(R.drawable.btn_background).mutate();                
btnBlackLayerList.setLayerInset(0, 0, 0, btnHeight/2);
btn.setBackground(layerList);

2

你需要通过编程来完成这个任务。

  1. 给图层列表和第二个元素都添加android:id属性。
  2. 使用getResources().getDrawable()获取图层列表和第二个元素的引用。确保将图层列表强制转换为LayerDrawable
  3. LayerDrawable和第二个元素的Drawable上可能需要调用Drawable.mutate()
  4. 获取按钮高度,并使用Drawable.setBounds()修改第二个图层的绘制矩形。
  5. 使用LayerDrawable.setDrawableByLayerId()替换图层列表中更新的Drawable
  6. 将LayerDrawable应用于您的按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接