2010-10-27 65 views
2

我有一个按钮。 该按钮由StateListDrawable(由3个9-补丁图像组成)构造而成。 我需要添加一个额外的drawable,它将驻留在按钮的右侧,我需要它与按钮的右侧对齐。 我尝试使用以下命令:Android Layer_Drawable作为按钮

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/blue_back_button_drawable" /> 
    <item> 
     <bitmap android:src="@drawable/filter_by_button_v_mark" android:gravity="right"/> 
    </item> 
</layer-list> 

它没有工作和V图像确实是右对齐,但它具有从按钮的右侧差异。这里有一个快照:alt text

我希望图像与按钮的左边,现在我觉得我能做到这一点的唯一方法保持一致的是:

  1. 继承按钮,在onLayout AFTER宽度已设置得到正确的边缘。
  2. 获取可绘制背景(layerDrawable)
  3. 计算按钮的宽度减去v图像宽度并将其设置为可绘制中的左边距。

我不应该提这听起来可怕:-)我希望有更好的方法。哦,它不是图像的一部分的原因是我需要知道它的宽度,所以我可以计算文本填充,所以它不会被按钮的文本隐藏,因为它看起来不像9贴片。

+0

快照并没有显示某些原因:-( – codeScriber 2010-10-27 14:25:28

回答

0

似乎没有适当的解决方案。图层显然是静态的,而不是9层的图像,或者看起来好像。 所以我扩展了Button,改变了它的Draw,我不得不使用Canvas.restore()来突破边缘,将我的边缘向下,并将我的图像放在右上角... 代码如下:

@Override 
public void setPadding(int left, int top, int right, int bottom) { 
    right += mImageWidth; 
    super.setPadding(left, top, right, bottom); 
} 

private void setVImageDrawable(Drawable d) { 
    mVImageDrawable = d; 
    mImageWidth = mVImageDrawable.getIntrinsicWidth(); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if(mVImageDrawable != null && mIsMarked){ 
     //for some reason the clip binds us to position with margins, which is not so good for us. 
     //we need to save the clip, restore the canvas to pre clipping mode, do what we need then 
     //put the canvas back to it's previous clipping state. 
     Rect bounds = canvas.getClipBounds(); 
     canvas.restore(); 
     int right = getRight(); 
     int left = right - mImageWidth; 
     int top = getTop(); 
     int bottom = top + mVImageDrawable.getIntrinsicHeight(); 
     mVImageDrawable.setBounds(left, top, right, bottom); 
     mVImageDrawable.draw(canvas); 
     canvas.save(); 
     canvas.clipRect(bounds); 
    } 
} 

如果我不打破原来的画布iget'推下'我添加的任何边距,它也可能是固定的我认为使用xml属性,指定是否应该在包含此按钮的布局上裁剪儿童,但我发现这个跛脚的解决方案,因为它使我的按钮依赖于我们的条件。 图像本身我从XML使用新的属性和风格和主题我声明。

希望它能帮助一些人。

+0

你可以给更多的代码,我也一样为你 – pengwang 2010-11-24 14:16:50

+0

你可以告诉我exatly你需要什么? – codeScriber 2010-11-27 16:14:16