Как мне макет панели кнопок с кнопками разной высоты? - PullRequest
0 голосов
/ 26 сентября 2011

Как мне реализовать панель кнопок с кнопками различной формы и высоты? В качестве примера (прошу прощения за мои плохие навыки рисования для этого быстрого макета): Button Bar example

Пример панели имеет 3 кнопки, средняя кнопка (3) отличается по форме и высоте от других 2 кнопок (1,2). Панель кнопок будет представлением, которое включено и объединено с другими представлениями, так что кажется, что оно плавает поверх родительского представления.

Я думал о реализации кнопок 1 и 2 в макете, а затем о кнопке 3 как о другом макете, который я затем объединяю с макетом первых двух кнопок.

Ответы [ 4 ]

1 голос
/ 26 сентября 2011

Я точно не знаю, что это сработает, и я не могу проверить это, но вы можете попробовать что-то подобное; Я считаю, что все это можно сделать элегантно с помощью XML.

  1. Иметь RelativeLayout (id: mainLayout), который будет содержать все ваши представления, wrap_content для обоих измерений.
  2. Пустой вид, как ваш первый ребенок, который будет служить фоновой полосой
  3. Установите цвет фона / изображение View на то, что вы хотите; layout_width to fill_parent; layout_height to wrap_content; layout_alignTop = "@ идентификатор / LeftButton"; layout_alignBottom = "@ идентификатор / LeftButton".
  4. Добавьте ImageButton для вашей центральной кнопки (id: bigButton), wrap_content для обоих измерений; layout_centerInParent = "истина".
  5. Добавьте ImageButton для левой кнопки (id: leftButton), wrap_content для обоих измерений; layout_toLeftOf = "@ идентификатор / bigButton"; layout_centerInParent = "истина".
  6. Добавьте ImageButton для правой кнопки (id: rightButton), wrap_content для обоих измерений; layout_toRightOf = "@ идентификатор / bigButton"; layout_centerInParent = "истина".

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

1 голос
/ 26 сентября 2011

Как говорили мои предыдущие товарищи, вам нужен какой-то макет или контейнер, который может иметь фон (если вы хотите, чтобы кнопка № 3 находилась над ним), а затем используйте относительный макет для смешивания этих двух недостатков, помимо сложности.заключается в том, что вы не можете относиться к двум другим кнопкам, поскольку они находятся в другом макете.

Более элегантным решением может быть использование специального фона для рисования, который может:

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

, затем вы можете зарегистрировать обратный вызов в вашей активности, чтобы занять текущую позицию кнопки # 3 и соответственно установить высоту, таким образом, у вас все еще один макет со специальным рисунком в качестве фона.

Настроенный LevelDrawable может dтрюк.

1 голос
/ 26 сентября 2011

Я бы расположил эту панель следующим образом:

  • RelativeLayout в качестве контейнера для остальных, с высотой, установленной в wrap_content и alignparentbottom = true
  • ImageView для бара
  • 2 кнопки с прозрачным фоном (кнопки 1 и 2)
  • Кнопка 3 - это пользовательская кнопка с пользовательским изображением трапеции в качестве фона

Таким образом, у вас будет макет, подобный следующему:

<RelativeLayout
   ...>

   <ImageView
      .../>

   <Button
      ... Button 1 />

   <Button
      ... Button 2 />

   <Button
      ... Button 3 />

</RelativeLayout>
0 голосов
/ 26 сентября 2011

Лучше вы можете создавать таблицы с различными стилями кнопок или относительной раскладкой для кнопки «3»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...