Добавить этот класс в новом файле, но для теста может быть один и тот же файл
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
больше, но установлены на фиксированные значения, но это не проблема, поскольку в первый раз они уже были рассчитаны весом, поэтому он должен работать и на разных устройствах.
Снова мы должны удалить поля, вы можете извлечь эту часть в некоторые предварительно просчитанные переменные, чтобы не делать этого расчета для всех элементов.
Привет, мне нужно спросить, для чего вам нужна кнопка, а не просто использовать фон, но с изображением для бомбы и, возможно, отправить больше кода, было бы намного легче помочь. Но если вы предпочитаете, мы могли бы просто сосредоточиться на подгонке изображения кнопкой. – kirotab
@kirotab Мне нужна кнопка, потому что изображение появляется, когда нажимается. Я не думаю, что может потребоваться какой-либо другой код, потому что опубликованный один является единственным, связанным с проблемой. Мне просто нужно установить его внутри ImageButton. Спасибо. – BekaBot
@kirotab, кстати, помните, вы ответили на вопрос о том, как удалить промежутки между элементами этой матрицы? :) Ты сделал этот мой день, еще раз спасибо :) – BekaBot