我今天处理了一个类似的问题,我发现从 Jelly Bean 开始,您可以使用它setSwitchMinWidth(width);
来设置完整开关的最小宽度。但是,我还认为,如果您的文本太大,则小部件会在左侧被切断。更改拇指上的默认文本填充在这里可能会派上用场, setThumbTextPadding(num);
您可以对其进行修改。
唯一的问题——这实际上是一个障碍——到目前为止我偶然发现的是,当然应该根据父容器的大小来扩展开关。为此,我将开关包装在自定义线性布局中(它还为 API <= 15 提供了后备)并尝试了以下操作:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (android.os.Build.VERSION.SDK_INT >= 16) {
adaptSwitchWidth(w);
}
}
@TargetApi(16)
private void adaptSwitchWidth(int containerWidth) {
Switch sw = (Switch) compoundButton;
sw.setSwitchMinWidth(containerWidth);
}
不幸的是 - 无论出于何种愚蠢的原因 - 开关小部件对此没有反应。我试图在OnLayoutChangeListener
没有成功的情况下做到这一点。理想情况下,在该状态下也应该知道开关的当前大小,我想将可用空间“分配”到填充,如下所示:
int textPadding = Math.max(0, (sw.getWidth() - containerWidth) / 4);
sw.setThumbTextPadding(textPadding);
但sw.getWidth()
仍然返回 0 in onSizeChanged()
,可能是因为它仍然没有正确布局。是的,我们快到了……如果你偶然发现了什么,请告诉我:)