我正在尝试将Button的背景设置为我在代码中创建的PaintDrawable。这很好用,但我的Button看起来比android.view.Button大。
在下图中,第一个Button是MyButton的一个实例,第二个按钮是android.widget.Button的一个实例。
我尝试在PaintDrawable和MyButton上设置填充,但都没有任何明显的效果。
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));
}
}
答案 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);