2010-10-14 5 views
0

Я нахожу необходимость выкладывать довольно сложный пользовательский интерфейс вручную, задавая размеры и положение большинства всех подматричек. Мой план состоит в том, чтобы сначала закодировать XML для экрана 480x320, заставить все работать прямо на демо для клиента на данном устройстве, а затем модифицировать его для производства, программно регулируя размер и положение просмотров, чтобы адаптировать его к любому размеру экрана он работает.явным образом выкладываю UI

Первый ... Я знаю, что это не рекомендуемый подход. Я потратил навсегда попытку заставить автоматические макеты работать правильно (вместе с анимацией). Честно говоря, я не думаю, что они были сделаны для того, как клиент хочет этого, и у меня просто нет времени, чтобы пообщаться с ним. (а также не научитесь делать гибкий пользовательский макет)

Учитывая, что я должен делать измерение/позиционирование? Я могу сделать onMeasure(), чтобы установить размеры (игнорируя входящие параметры и основывая их вместо этого на моем знании разрешения экрана, которое измеряется при запуске Activity), но где я устанавливаю положение каждого представления? В onLayout()? Предположим, что все представления будут подклассами в любом случае (в отличие от использования компонентов из коробки)

В идеале, я хотел бы иметь одно место, где я измеряю разрешение экрана, а затем захватывать каждый вид и устанавливать его x, y, ширина и высота. Это возможно? Если да, то как?

Редактировать: теперь предлагается щедрость. Обратите внимание, что я также сделал эскиз одной простой проблемы, которую я пытаюсь решить - http://karmalita.com/stuff/layout.png - что, если вы можете сделать это «правильным» способом (скажем, используя относительный макет), то щедрость ваша.

+1

'Мой план для кодирования XML для 480x320 дисплея, получить все работая справа на демо для клиента на данном устройстве, а затем модифицируйте его для производства, программно регулируя размер и положение просмотров, чтобы адаптировать его к размеру экрана, на котором он работает. «Это звучит как ужасная идея – Falmarri

+0

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

ответ

1

Из вашей диаграммы базовая структура может быть примерно такой. Обычно вы не указываете абсолютные значения, такие как «50dp» для ширины и высоты макета, вместо этого полагаясь на представления, чтобы сообщать о своем желаемом размере. Например, если ваша верхняя панель - это 9-патч-граница с текстом внутри, вы можете просто сделать это TextView, где вы укажете текст, и установите 9-патч с помощью android: background = "@ drawable/..." и пусть текстовое представление вычислит соответствующую ширину и высоту, основываясь на размере текста и дополнении 9-патча. (И чем использовать match_parent игнорировать этот размер и позволить ему растягиваться, чтобы заполнить его родителя или wrap_content использовать его нужный размер.)

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="50dp" /> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" /> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <View 
      android:layout_width="??dp" 
      android:layout_height="55dp" /> 
     ... 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <View 
      android:layout_width="??dp" 
      android:layout_height="60dp" /> 
     ... 
    </LinearLayout> 
</LinearLayout> 
+0

Ahh ok, я думаю, что комбинация 0px и weight = 1 - это то, что заставило этот вид заполнить доступное пространство. Интересно. Спасибо и прошу не тратить все свои очки в одном месте. :) FWIW, учитывая всю анимацию и такую, что мне нужно сделать (клиент хочет, чтобы она выглядела так же красиво, как приложение iphone, которое было сделано кем-то другим), мне, вероятно, придется идти с ручным позиционированием. (используя getLayoutParams(), затем устанавливая некоторую комбинацию ширины, высоты, x и y в представлениях детей из конструктора активности) – rob

0

Как указал Фальмари, не создавайте его только для 480x320, но делайте его значимым с самого начала.
Можете ли вы рассказать о пользовательском интерфейсе? Возможно, эскиз? Использование комбинации макетов должно быть возможно, даже если оно сложное.

+0

Я предполагаю, что это возможно, если я немного прикручу его. У меня просто нет такого времени, и я знаю, как просто явно разместить все, где нужно. Я бы хотел провести еще пару недель, пытаясь узнать все варианты макета, но я не могу позволить себе это прямо сейчас. Я могу опубликовать эскиз. – rob

+0

Хорошо, вот эскиз - http://karmalita.com/stuff/layout.png - хотя есть некоторые дополнительные сложности (в том числе анимация). Однако просто получить то, что показано в эскизе, было бы отличным началом. ... похоже, что это должно быть тривиально легко, но мне не повезло. Важно то, что синяя коробка должна заполнять все вертикальное пространство минус, которое заполняется барами сверху и снизу. – rob

+0

Я быстро сделал xml-макет, который вы можете использовать. Просто удалите кнопки, которые вы хотите разместить в представлениях. http://www13.zippyshare.com/v/73910797/file.html – BlackDragonBE

Смежные вопросы