Страница 1 из 1

Как сделать квадратные кнопки

Добавлено: 25 авг 2015, 01:09
_Вячеслав_
Здравия!
Помогите пожалуйста, а то уже времени потрачено , а результата....

Необходимость следующая - нужно создать 3х3 кнопок, но так, чтобы они на всех экранах растягивались и были строго квадратными.

Заранее спасибо.

Re: Как сделать квадратные кнопки

Добавлено: 25 авг 2015, 01:33
doter.ua
Метод для получения размеров дисплея, дальше сам.

Код: Выделить всё

   public static int[] getDisplaySize(Context context) {
        Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
        return new int[]{width, height};
    }

Re: Как сделать квадратные кнопки

Добавлено: 25 авг 2015, 17:27
_Вячеслав_
Такое решение мне показалось полегче:

public class SquareImageButton extends ImageButton {

public SquareImageButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public SquareImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
}

public SquareImageButton(Context context) {
super(context);
}

/**
* Рассчитывает размеры кнопки таким образом, что ее высота никогда не будет меньше
* ее ширины. В остальном работает как метод onMeasure класса ImageButton
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// вызываем метод onMeasure класса ImageButton, чтобы расcчитать размеры
// кнопки стандартным образом

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

// сейчас наша кнопка имеет такие же размеры как если бы
// она была экземпляром класса ImageButton
// начинаем добавлять новую логику расчета размера
// получаем рассчитанные размеры кнопки

final int height = getMeasuredHeight(); // высота
final int width = getMeasuredWidth(); // ширина

// теперь задаем новый размер
// ширину оставляем такую же как у стандартной кнопки
// высоту выбираем как максимум между стандартной высотой и шириной

setMeasuredDimension(width, Math.max(width, height));
}

}

Re: Как сделать квадратные кнопки

Добавлено: 26 авг 2015, 01:04
_Вячеслав_
Блин.. всё выглядело так красиво.. потом выяснилось, что текст в imagebutton сделать нельзя.. перевел всё на ТекстВью.. когда начинаешь текст писать всё криво делается...
Что делать,
Я так понимаю надо сначала определить размеры экрана, а затем что? Делить на три? и ставить размеры каждой кнопке?
А если я 5х5 кнопок то на пять делить?

уже третий день макет не могу сделать...
я в печали..

Re: Как сделать квадратные кнопки

Добавлено: 26 авг 2015, 02:09
doter.ua
Сторона одного из N квадратов = (screenW - ( 2 * отступ_сбоку + (N-1)* отступ_между_квадратами )) / N
потом с помощью LayoutParams задаешь вьюшкам widht и height.

Код: Выделить всё

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
layoutParams  set отступы всякие, гугл в помощь.
LinearLayout.LayoutParams - тип выбирается выбирается по принципу: КлассКонтейнер.LayoutParams.

З.Ы. на счет имгВью и с текстом: OnDraw + paint draw text (Если сам канвас довольно дремучая тема, то конкретно draw text можно освоить быстро, особо не погружаясь в детали канвы. ) Уроки: 142 и 149 (там не полностью про текст, можешь прочитать фрагментами)