| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Android > Вычисление размеров |
| Автор: math64 11.8.2012, 23:17 |
| 1. В верхней части экрана (портретная ориентация) или в левой (ландшафт) xoчу разместить квадратный GridView. Определяю размеры экрана и выставляю размеры по минимальной размерности. Но для ландшафта нужно вычесть высоту заголовка. Как её узнать (или узнать размеры рабочей области окна для Activity, а не всего экрана)? 2. Внутри Grid хочу разместить квадратные ячейки. Как узнать размеры, оставшиеся под ячейку, с учетом всех margin и padding? 3. Определились с размером ячейки. Как определить размер шрифта, которым можно вывести одну букву внутри ячейки? PS: Все нормальные Layout'ы считают наоборот - исходя из размера шрифта определяется размер ячейки, исходя из размеров ячейки - размер грида, если грид не влезает в экран - на тебе прокрутку, или пустое место внизу экрана. Сейчас всё сделано с использованием "магических" констант для конкрентого экрана. |
| Автор: PiyodaiSiyo 12.8.2012, 00:01 |
в res папке сделаешь layout/main.xml для портрета и layout-land/main.xml для лэндскейпа размеры в density independent pixels |
| Автор: math64 12.8.2012, 18:05 |
| Естественно, есть отдельные layout для портрета и ландшафта. Вопрос как вычислить размеры. Размеры можно прописать в dimens.xml, чтобы не плодить много layout'ов - но тогда на каждый экран нужно по два dimen.xml - для ладшафта и портрета. В тоже время можно обойтись двумя layout'ами, если научиться вычислять размеры. |
| Автор: PiyodaiSiyo 12.8.2012, 22:32 | ||||||||||||||||||||||||||
я так понимаю нужен уст. AbsluteLayout. итак в манифесте в тегах activity нужно проставить android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" с активити
теперь есть полный доступ к экрану.
от пэдингов и маржинов в лэйаутах прийдется отказаться в onCreate
для грида например
в makeCalculations()
200 и 120 от балды.ну например размер имиджа пнж в пикселах теперь после размеров решетки в mainWindow()
все . решетка имеет размеры пропоционально равные на всех экранах и вот она
для текстВью
где gr()
для элементов ImageView сам разрулишь но если честно тяжеловато лучше уж папки для всех экранов и денсити всего 8 если не ошибаюсь |
| Автор: math64 13.8.2012, 08:28 | ||||||
| Магических констант у тебя тоже много. Если уж убирать заголовки - AbsoluteLayout не нужен, используется LinearLayout - хотя коду без разницы
альтернатива - создать свой класс Board extend GridView и переопределить метод onMeasure() - так бы и сделал, если бы это решало все проблемы. Все паддинги и марджины - нуле. Для GridView задаю цвет background - чтобы было видно, что поля добавлены именно GridView.
Всё равно поля есть. Может какие пропустил? И на скроллинг всё-равно реагирует, хотя скроллировать нечего.
|
| Автор: PiyodaiSiyo 13.8.2012, 11:10 |
| то что я выложил работает на всех экранах кроме Honeycomb,там бар трея не нашел как убрать.Это из эппа которая 'прошла'. да,на скроллинг реагирует но только в эмуляторе попробуй на устройстве. касательно магических констант, 120/200 это помоему было стандартное отношение сторон экрана и все на этом держится. Там же пропорции.... Пардон если чего не уловил. 8/ |
| Автор: math64 13.8.2012, 11:52 |
| Чаще рапространены экраны с пропорциями 3:5, например у меня - 480x800, диагональ 4". Но все параметры экрана доступны в DisplayMetrics. Поэтому 120/200 заменить не проблема. Я про другие константы - 2f, 3f, 12f, 13f, 15f, 108f, 115f, 125f - откуда они? У меня таких констант 3 (при полноэкранном режиме останется 2) textSize ты получаешь из высоты ячейки делением на 3. А нужно делить примерно на 2 (точнее умножать примерно на 0.55f, подобранно экспериментально для своего экрана, но эта константа зависит от шрифта). Тестирую, как правило, на устройстве - эмулятор слишком медленный. Про скроллинг жалуюсь в своём коде, как в твоём - не знаю, |
| Автор: PiyodaiSiyo 13.8.2012, 15:35 |
| да все просто. открываешь пэинтнет и масштабируешь фоновую картинку. т.е .200 х 120 включаешь координатную сетку. и вот откуда появляются кастомные циферки, просто представляешь себе этот грид на фоне тупо отсчитываешь х0, х1,у0 и у1 . ты ведь получаешь например Х0=ширина эк * х0/200 в эппе. а зачем там нпр.13f не упомню. кроме грида много чего было рядом. касательно ячеек - получено на подгонке. |
| Автор: math64 13.8.2012, 16:38 | ||
Сделал всё-таки класс Board - он теперь в onMeasure() вычисляет свои размеры, Теперь MAGIC_HEADER_HEIGHT не нужен. он оказался равен 38.
Причем при редактировании main.xml в графическом виде Board теперь выглядит так, как будет выглядеть при запуске (если с конструкторе подключить адаптер). PS: лишние поля возникали из-за селектора, который больше размера ячейки (задаётся с помощью .9.png). Заменил своим селектором, который не вылезает за размеры ячейки - поля пропали. Размер грида в коде выше нужно окуглить, чтобы делился на число колонок/строк. Остаётся вычисление высоты шрифта. |
| Автор: PiyodaiSiyo 13.8.2012, 22:06 |
| ок. я рад за тебя , проверь на всех размерах и android версиях все равно (зы: и всетаки папки лучше |