java - 图像超出 ImageButton

标签 java android imagebutton

enter image description here

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 中?谢谢!

最佳答案

将此类添加到新文件中,但对于测试可能是同一个文件

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 不再但是设置为固定值,但这不是问题,因为它们是第一次按重量计算,因此它也应该适用于不同的设备。

同样,我们必须删除边距,您可以在一些预先计算的变量中提取该部分,以便不对所有项目进行此计算。

关于java - 图像超出 ImageButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592733/

相关文章:

java - 转换类型 char,类似的赋值行为不同

java最快的SSD并发随机文件读/写方法,无需内存交换

android - Android Studio 3.1 中的 ADM 在哪里?

android - 以编程方式设置按钮的边距

android - 如何在 EditText 中放置按钮

android - ImageButton 属性检查

java - Socket编程中java中A、B、S如何通信?

java - 使用 OK/DONE 按钮在 Android 上以编程方式显示键盘

java - 建议Libgdx初学者教程?

java - 如何在 Java 中调用 Kotlin 类键?