ImageButtons和Image都是以编程方式添加的:
//some code...
int pixelsToDp = convertToPixelsDp(-4.5f);
params.setMargins(pixelsToDp, pixelsToDp, pixelsToDp, pixelsToDp);
//some code...
ImageButton btn = new ImageButton(this);
btn.setPadding(0, 0, 0, 0);
btn.setLayoutParams(params);
btn.setScaleType(ImageView.ScaleType.CENTER_CROP);
buttonRow.add(btn);
图像由setBackgroundResource()函数添加。如何使图像完全在ImageButton内?谢谢!
答案 0 :(得分:1)
在新文件中添加此类,但测试可能是同一个文件
class MyImageButton extends ImageButton
{
MyImageButton(Context context){
super(context);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh){
Log.v("measure", "width:" + w + " height:" + h);
if(w != h) {
TableRow.LayoutParams params = new TableRow.LayoutParams(
w, w
);
int pixelsToDp = convertToPixelsDp(-4.5f);
params.setMargins(pixelsToDp, pixelsToDp, pixelsToDp, pixelsToDp);
this.setLayoutParams(params);
}
}
}
现在使用新创建的类而不是原始的ImageButton
ImageButton btn = new MyImageButton(this);
如果您希望缩放图像
,也可以更改此设置btn.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
(我已经使用btn.setImageResource(R.drawable.ic_launcher);
进行了测试)
如果有效,可以进行一些解释:)
在我们的ImageButton
扩展类中,我们覆盖了onSizeChanged
,我们正在设置新的布局参数,它们不再由weight
计算,而是设置为固定值,但这不是问题,因为它们第一次已经通过重量计算,所以它也应该在不同的设备上工作。
我们必须再次移除边距,您可以在一些预先计算的变量中提取该部分,以便不对所有项目进行此计算。
答案 1 :(得分:0)
解决这个问题的最简单方法。只是改变图片尺寸。我这样做了。