Во-первых, я неправильно прочитал ваш вопрос. Для меня казалось, что вам нужен макет, как показано на картинке, которую вы опубликовали. Но, посмотрев библиотеку android-segmented-control
, ясно, что вы ищете элемент управления, который позволяет переключаться между A
, B
, C
... и т. Д. Библиотека использует RadioGroup
, что действительно является лучшим вариантом.
Я заметил, что библиотека использует отрицательные поля, которые я читал, вызывает проблемы на некоторых устройствах. Поддержка API 21 также отсутствует.
Как работает xml подход: RadioGroup
построен на основе LinearLayout
.Немного известная функция (вероятно, потому, что она не подходит большую часть времени) LinearLayout
- ее атрибут divider
. Если используется android:showDividers="..."
, то LinearLayout
будет показывать разделители вместе со своими дочерними элементами. Там, где показаны эти разделители, зависит от значения, указанного для showDivider=".."
. Возможны три значения: middle
, beginning
& end
. Мы будем использовать middle
, чтобы показать разделители между A
& B
, и B
& C
.
Для проводной рамки нам не нужно несколько чертежей (по крайней мере, не сейчас). Мы можем сделать со следующим:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:color="@color/stroke_color" android:width="@dimen/stroke_width"/>
<corners android:radius="@dimen/corner_radius"/>
</shape>
вытяжка выше будет установлена в качестве фона RadioGroup в. И showDividers
позаботится о вертикальных подразделениях между A
, B
& C
. Итак, наш макет выглядит так же, как и ваша опубликованная фотография. Ну, с showDividers
, мы также должны обеспечить divider
вытяжки:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/stroke_color"/>
<size android:width="@dimen/stroke_width"/>
</shape>
Теперь мы должны заботиться о активных состояниях для RadioButtons
. Учитывая закругленные углы, нам нужно будет написать 3 разных рисунка: один для первого ребенка, один для середины, один для последнего. Этот подход является масштабируемым - первый и последний доступный остаются неизменными, в то время как каждый ребенок между первым & последним получает средний результат.Я создал несколько гов, которые можно добавить в свой проект:
API < 21 - место в этих res/drawable
:
RadioGroup background
RadioGroup divider
RadioButton background for first child
RadioButton background for middle child
RadioButton background for last child
API> = 21 - место их в res/drawable-v21
:
RadioButton background for first child
RadioButton background for middle child
RadioButton background for last child
Ресурсы - содержит определенные цвета, д imensions и стили - Вы можете поместить этот файл в res/values
или скопируйте и вставьте каждый тип ресурса к соответствующему файлу:
Resources
Наконец, вот пример XML-макет, который показывает, как определенные стили, чтобы это произошло :
Sample
в действии на уровне API < 21:
pre_lollipop.mp4
В действии на API 21:
lollipop.mp4
Я считаю, что вы хотите поместить кнопки бок о бок в таблице, похожие на эту тему: http://stackoverflow.com/questions/18429748/ android-two-buttons-side-by-side-in-table-row – James
вы можете использовать сегментированный переключатель. – Shadow
@Fahim: ничего – zatziky