Android:为什么setPadding不被尊重?

时间:2012-02-16 20:53:56

标签: android

我正在尝试将Button的背景设置为我在代码中创建的PaintDrawable。这很好用,但我的Button看起来比android.view.Button大。

在下图中,第一个Button是MyButton的一个实例,第二个按钮是android.widget.Button的一个实例。

我尝试在PaintDrawable和MyButton上设置填充,但都没有任何明显的效果。

enter image description here

public class MyButton extends Button
{
    PaintDrawable drawable = null; 

    public ColorButton(Context context)
    {
        super(context);

        drawable = new PaintDrawable();
        drawable.getPaint().setColor(Color.WHITE);
        drawable.setCornerRadius(1);

        //neither of these seem to do anything?
        drawable.setPadding(10, 10, 10, 10);
        setPadding(10, 10, 10, 10);

        setBackgroundDrawable(drawable);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //set gradient in here, because getWidth/getHeight are useless prior to this
        drawable.getPaint().setShader(new LinearGradient(getMeasuredWidth()/2, 0, getMeasuredWidth()/2, getMeasuredHeight(), Color.WHITE, Color.GRAY, Shader.TileMode.MIRROR));
    }
}

1 个答案:

答案 0 :(得分:3)

请注意填充和边距之间的区别

填充确定容器内部有多少“填充”。 边距确定容器外部留出多少空间。

由于您在空容器上设置填充,因此应该看不到可见的结果。 如果你的容器内有东西,你可能会注意到随着你的价值增加它会被压扁

在您的代码中尝试此操作。它只适用于按钮(您的父类)

//set your fill values to whatever you want
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(10, 10, 10, 10);
setLayoutParams(lp);