使用图层列表定义一个drawable,该图层列表的项目高度为一半

时间:2013-02-28 00:05:36

标签: android android-widget

我在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 个答案:

答案 0 :(得分:3)

在@ Tyler的帮助下,我找到了一种更简单的方法:

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

答案 1 :(得分:2)

您必须以编程方式执行此操作。

  1. 同时提供图层列表和第二项android:id属性。
  2. 使用getResouces().getDrawable()获取对图层列表和第二个项目的引用。请务必将图层列表转换为LayerDrawable
  3. 您可能需要在Drawable.mutate()和第二项LayerDrawable上致电Drawable
  4. 获取按钮高度并使用Drawable.setBounds()相应地修改第二层的绘图矩形。
  5. 使用LayerDrawable.setDrawableByLayerId()替换图层列表中更新的Drawable
  6. 将LayerDrawable应用于您的按钮。