Как сделать так, чтобы размер компонента Android зависел от экрана разных размеров? - PullRequest
0 голосов
/ 02 марта 2012

Я делаю компонент Android, который позволяет пользователю выбрать дату из него.Это может быть полезно для разработчика, который хочет, чтобы пользователь выбрал дату в своем приложении.В моем базовом представлении у меня есть TextView, в который будет вставлена ​​дата из всплывающего окна, и у меня есть кнопка рядом с TextView.Когда пользователь нажимает на кнопку, мой компонент выскакивает и отображает даты.Компонент выскакивает во всплывающем окне и показывает даты в виде месяца, и пользователь также может переключаться со следующих предыдущих месяцев, следующих за предыдущими годами, как мы делаем в Календаре.Проверьте изображение.

http://s15.postimage.org/ujw8py60b/stackoverflow.jpg (Извините, я не могу загрузить изображение сюда, потому что мне здесь запрещено, поскольку я здесь новый пользователь)

Каждая дата представляет собой TextView с шириной35 и высота как 30 установлены мной.DaysDisplayBar также имеет некоторый размер, установленный мной.Таким образом, полная ширина этого компонента составляет 245, а высота около 200. Это для размера экрана мобильного телефона.

Я хочу сделать этот компонент зависимым от размера для разных размеров экрана.Например, если он просматривается на планшете или планшете, его размер должен быть больше, чем его размер на экране мобильного телефона.То есть для различных дисплеев его размер должен быть изменен на какое-то значение, например, максимум 1/3 размера дисплея или что-то подобное.

Какое решение может быть для этого?По моему мнению, здесь нужна некоторая математика, некоторые формулы, уравнения и т. Д. Как насчет Параболы?Пожалуйста, помогите, я тупой в математике полностью.Спасибо!: D

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Прежде всего, убедитесь, что вы используете пиксели плотности (dip) вместо пикселей. Во-вторых, вы можете получить ширину и высоту экрана, а затем рассчитать размер компонента.

Размеры экрана можно получить с помощью метода Display class getSize():

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point screenSize = new Point();
display.getSize(screenSize);
int screenWith = screenSize.x;

Или вы можете получить размеры родительского вида:

MarginLayoutParams params = (MarginLayoutParams)parentView.getLayoutParams();
int padding = parentView.getPaddingLeft() + parentView.getPaddingRight();
int margin = params.leftMargin + params.rightMargin;
int measuredWidth = parentView.getMeasuredWidth() - padding - margin;

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

public static int getDensitySize(float size) {
    float density = getResources().getDisplayMetrics().density;
    return (int)(density * size);
}

Вы делаете все это из вашего onMeasure метода, чтобы установить размер вашего представления, а позже onDraw вы будете использовать этот показатель для рисования вашего компонента.

0 голосов
/ 02 марта 2012

"Каждая дата представляет собой TextView с шириной 35 и высотой 30, заданной мной. DaysDisplayBar также имеет некоторый размер, установленный мной. Поэтому вся ширина этого компонента составляет 245, а высота - около 200. Это для экрана мобильного устройства.размер. "

^^ это проблема.Размеры должны быть определены относительно макета, а не абсолютные.Например, календарь имеет 7 столбцов (по одному на каждый день).Вместо каждого 35px, сделайте каждую 1/7 экрана.

SO:

Я предполагаю, что DaysDisplayBar - это строка, содержащая 7 TextViews (по одному на каждый день).Если это правда, почему бы не назвать это Week?В любом случае, уловка в layout_wieght.Сделайте все элементы fill_parent и все с одинаковым весом 1. Это будет равномерно нарушать работу всех элементов в родительском элементе.В вашем случае родителем является DaysDisplayBar.

SO:

set DaysDisplayBar атрибут `layout_width =" fill_parent "

Для каждого TextView set атрибутаlayout_width="fill_parent" AND layout_weight = "1" `

надеюсь, это поможет!

...