我正在尝试以编程方式为Switch定义一些自定义drawable,使用jelly bean引入setXXXDrawable()方法。然而,事情对我来说并不奏效。
我目前的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
((Switch) view).setShowText(true);
//Background
StateListDrawable back = new StateListDrawable();
GradientDrawable backn = new GradientDrawable();
backn.setColor(TX.res.getColor(R.color.textSecondary));
backn.setCornerRadius(8 * TX.res.getDisplayMetrics().scaledDensity);
GradientDrawable backd = new GradientDrawable();
backn.setColor(TX.res.getColor(R.color.textDisabled));
backn.setCornerRadius(8 * TX.res.getDisplayMetrics().scaledDensity);
back.addState(new int[]{-android.R.attr.state_enabled}, backd);
back.addState(StateSet.WILD_CARD, backn);
((Switch) view).setTrackDrawable(back);
GradientDrawable thumbn = new GradientDrawable();
thumbn.setColor(TX.res.getColor(R.color.colorAccent));
thumbn.setCornerRadius(8 * TX.res.getDisplayMetrics().scaledDensity);
//((Switch) view).setThumbDrawable(thumbn);
如果我只设置拇指可绘制,JellyBean和Lollipop都可以正常工作。
如果我只设置轨道可绘制,那么棒棒糖会正确显示它。如果我也设置拇指可绘制,棒棒糖既不绘制,也只绘制文本。
另一方面,当我尝试设置轨道可绘制时,果冻豆只会立即显示几个点。这些点显然属于拇指(即使我只设置了可绘制的轨道),因为它们在按下开关时会移动。我如何声明我的drawables,以便这对我有利?
答案 0 :(得分:0)
开关的高度完全取决于轨道可绘制,GradientDrawable
的默认大小大概为0或1,我发现设置大小可以解决问题。
[...]
backn.setSize(1,50);
[...]
backd.setSize(1,50);
请注意,开关和轨道的宽度完全基于拇指小部件宽度的两倍,该小部件是打开或关闭状态的最大宽度的大小。这就是为什么轨道的宽度是一个像素并不重要的原因。