Android: есть ли способ заставить fill_parent не уменьшаться в соответствии с родительским родителем? - PullRequest
2 голосов
/ 21 января 2011

Моя деятельность выглядит так

| header           |
|------------------|
|  ViewGroup       |
|  that fills      |
|  the screen      |
|                  |
|     centered     |
|      button      |
|                  |
|------------------|
| footer           |

Группа представлений, заполняющая экран, является дочерней по отношению к RelativeLayout, который RelativeLayout заполняет экран с помощью заголовка fill_parent и layout_below и нижнего колонтитула layout_above. ViewGroup под этим RelativeLayout устанавливается равной ширине и высоте RelativeLayout во время выполнения.

Причина, по которой во время выполнения установлена ​​одинаковая высота, заключается в том, что эту группу представлений можно перетаскивать пальцем влево (аналогично домашнему экрану Android). Если перетащить ее влево, это нормально. Но если я перетащу его вправо, мои размеры fill_parent испортятся.

| header           |
|------------------|
|     '  ViewGroup |     ' 
|     '  that fills|     '
|     '  the screen|     '
|     '            |     '
|     '  centered  | <-- button not centered. It is only centered on the visible area, not the whole thing
|     '   button   |     '
|     '            |     '
|     '            |     '
|------------------|
| footer           |

Я позиционируюсь так, устанавливая левое поле ViewGroup, которое сместит его вправо (или отрицательно, чтобы сместить его влево)

Почему я не могу использовать HorizontalScrollView.

Вот вид сверху на андроид

     ' previous ' current  '   next   ' # Three panes that can be dragged to switch between
                |          | # The android screen bounderies

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

        ' previous ' current  '   next   ' 
                |          |

Тогда экраны должны анимироваться обратно на место

     ' previous ' current  '   next   ' 
                |          |

Если пользователь делает это быстро

              ' previous ' current  '   next   ' 
                |          |

Тогда экраны должны анимировать оставшуюся часть пути

                ' previous ' current  '   next   ' 
                |          |

Предыдущий должен стать новым током, и у нас должен быть новый предыдущий

     ' previous ' current  '   next   ' 
                |          |

Я использовал прокрутку, я бы делал что-то вроде этого

     ' previous ' current  '   next   ' 
     |          |

Теперь нет места для нового предыдущего, если я не прыгаю по прокрутке

     ' previous ' current  '   next   ' 
                |          |

, что звучит для меня еще хуже.

Так что мои варианты

  • AbsoluteLayout (устарело / не используется)
  • RelativeLayout.LayoutParams.setMargins (см. Ниже. Вот чем я сейчас занимаюсь)
  • Напиши свой LayoutManager (звучит проще, чем есть)
  • Нарисуйте пиксели на экране вместо использования View s (DirectDraw или OpenGL)
  • HorizontalScrollView

1 Ответ

5 голосов
/ 21 января 2011

Если вы установите положительное левое поле, вам также следует установить отрицательное правое поле. Это позволяет ViewGroup продолжать работу с края экрана с правой стороны.

...