Android: альтернатива AbsoluteLayout (мне действительно нужно абсолютное позиционирование) - PullRequest
3 голосов
/ 20 января 2011

Я пытаюсь написать приложение для календаря, и я планирую использовать сетку (просмотр недели), которая, вероятно, будет TableLayout, и прямо над этим мне придется абсолютно позиционировать события в сетке.

Но AbsoluteLayout устарело.Что я должен использовать вместо этого?

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

Может быть, я должен использовать RelativeLayoutс полем слева и полем top на каждом из дочерних узлов.Кажется странным делать это таким образом и, возможно, не так эффективно.Это лучший способ или есть альтернатива?

Ответы [ 3 ]

1 голос
/ 21 января 2011
  • CommonsWare предложила написать свой собственный менеджер макетов, и Кристиан отметил, что это звучит проще, чем есть.
  • Яхель предложил SurfaceView / OpenGl и нарисуйте все, что я хочу.

Я обнаружил, что вы можете воссоздать абсолютное позиционирование, добавив свои дочерние виды к RelativeLayout и задав RelativeLayout.LayoutParams только значения по умолчанию, кроме width, height, marginTop и marginLeft. Верхнее и левое поля будут похожи на верхнее и левое в AbsoluteLayout. Также поддерживаются отрицательные поля.

Убедитесь, что вы учитываете плотность экрана, изменения ширины и ориентации, а также все другие предостережения об абсолютном позиционировании, которые применялись к AbsoluteLayout

Если у вас есть проблемы с переполнением контента через правый край экрана, попробуйте добавить положительное левое поле с таким же отрицательным правым полем. (оригинальный вопрос)

1 голос
/ 20 января 2011

Но AbsoluteLayout устарела.Что я должен использовать вместо этого?

Напишите свой собственный менеджер макета, который реализует нужные вам правила.

0 голосов
/ 20 января 2011

Я бы предложил пойти легким путем:

  1. Настройка календаря с интервалом 15 (или 30) минут, поэтому вам не нужно абсолютное позиционирование. Табличное представление, заполненное линейным представлением, каждое из которых представляет 15-минутный интервал, и заполнить их событиями.

Или идти сложным, но гораздо более стабильным / быстрым / настраиваемым способом:

  1. SurfaceView / OpenGl нарисуйте свой собственный, как вы хотите.

Проблема с номером 1 заключается в том, что чем больше элементов вы добавляете в иерархию представлений, тем больше ваше приложение будет испытывать снижение производительности. Скажем, в обычном месяце у вас есть 3 встречи в день, ваша иерархия будет заполнена сотнями просмотров, которые будут очень длинными для рендеринга и слишком тяжелыми для памяти.

Проблема с номером 2: ну, поначалу намного сложнее кодировать. Если вам нужно написать свой собственный менеджер компоновки, не надо, пойдите SurfaceView или openGL.

...