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

Интерфейс, диалоги, темы, стили, меню
Ответить
_Вячеслав_
Сообщения: 3
Зарегистрирован: 25 авг 2015, 01:03

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

Сообщение _Вячеслав_ » 25 авг 2015, 01:09

Здравия!
Помогите пожалуйста, а то уже времени потрачено , а результата....

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

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

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 25 авг 2015, 01:33

Метод для получения размеров дисплея, дальше сам.

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

   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};
    }
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

_Вячеслав_
Сообщения: 3
Зарегистрирован: 25 авг 2015, 01:03

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));
}

}

_Вячеслав_
Сообщения: 3
Зарегистрирован: 25 авг 2015, 01:03

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

Сообщение _Вячеслав_ » 26 авг 2015, 01:04

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

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

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 26 авг 2015, 02:09

Сторона одного из 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 (там не полностью про текст, можешь прочитать фрагментами)
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить