Здравия!
Помогите пожалуйста, а то уже времени потрачено , а результата....
Необходимость следующая - нужно создать 3х3 кнопок, но так, чтобы они на всех экранах растягивались и были строго квадратными.
Заранее спасибо.
Как сделать квадратные кнопки
-
- Сообщения: 3
- Зарегистрирован: 25 авг 2015, 01:03
Re: Как сделать квадратные кнопки
Метод для получения размеров дисплея, дальше сам.
Код: Выделить всё
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: Как сделать квадратные кнопки
Такое решение мне показалось полегче:
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));
}
}
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: Как сделать квадратные кнопки
Блин.. всё выглядело так красиво.. потом выяснилось, что текст в imagebutton сделать нельзя.. перевел всё на ТекстВью.. когда начинаешь текст писать всё криво делается...
Что делать,
Я так понимаю надо сначала определить размеры экрана, а затем что? Делить на три? и ставить размеры каждой кнопке?
А если я 5х5 кнопок то на пять делить?
уже третий день макет не могу сделать...
я в печали..
Что делать,
Я так понимаю надо сначала определить размеры экрана, а затем что? Делить на три? и ставить размеры каждой кнопке?
А если я 5х5 кнопок то на пять делить?
уже третий день макет не могу сделать...
я в печали..
Re: Как сделать квадратные кнопки
Сторона одного из N квадратов = (screenW - ( 2 * отступ_сбоку + (N-1)* отступ_между_квадратами )) / N
потом с помощью LayoutParams задаешь вьюшкам widht и height.
LinearLayout.LayoutParams - тип выбирается выбирается по принципу: КлассКонтейнер.LayoutParams.
З.Ы. на счет имгВью и с текстом: OnDraw + paint draw text (Если сам канвас довольно дремучая тема, то конкретно draw text можно освоить быстро, особо не погружаясь в детали канвы. ) Уроки: 142 и 149 (там не полностью про текст, можешь прочитать фрагментами)
потом с помощью LayoutParams задаешь вьюшкам widht и height.
Код: Выделить всё
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
layoutParams set отступы всякие, гугл в помощь.
З.Ы. на счет имгВью и с текстом: OnDraw + paint draw text (Если сам канвас довольно дремучая тема, то конкретно draw text можно освоить быстро, особо не погружаясь в детали канвы. ) Уроки: 142 и 149 (там не полностью про текст, можешь прочитать фрагментами)
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.