起初,我误读了您的问题。对我来说,您似乎需要一个布局,如您发布的图片所示。但是,在查看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>
上面的drawable将被设置为RadioGroup的背景。而showDividers 将负责A、B 和C 之间的垂直划分。因此,我们的布局现在看起来与您发布的图片相同。好吧,有了showDividers,我们还需要提供一个dividerdrawable:
<?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 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
资源 - 包含已定义的颜色、尺寸和样式 - 您可以将此文件放在 res/values 中或将每种资源类型复制粘贴到其各自的文件中:
Resources
最后,这是一个示例 xml 布局,它显示了定义的样式如何实现这一点:
Sample
在 API 级别
pre_lollipop.mp4
在 API 21 上的行动:
lollipop.mp4