Android中通过代码创建离散AppCompatSeekBar失败,求解决方法
代码创建离散AppCompatSeekBar的正确方式
你遇到的问题核心是:布局中android:theme是给View单独指定主题上下文,而AppCompatSeekBar构造方法的第三个参数是样式资源,并非主题——离散SeekBar的样式依赖主题中的属性定义,直接传样式ID无法正确加载这些主题属性,导致SeekBar不可见。
正确实现步骤
- 用
ContextThemeWrapper包装上下文,注入离散SeekBar的主题 - 基于包装后的上下文创建
AppCompatSeekBar - 设置布局参数并添加到父容器
示例代码:
// 用主题包装上下文 Context themedContext = new ContextThemeWrapper(context, R.style.Base_Widget_AppCompat_SeekBar_Discrete); // 创建离散SeekBar AppCompatSeekBar discreteSeekBar = new AppCompatSeekBar(themedContext); // 设置布局参数(根据父容器类型调整,这里以LinearLayout为例) discreteSeekBar.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT )); // 可选:设置刻度数量(离散SeekBar需要指定max才会显示刻度) discreteSeekBar.setMax(10); // 添加到父布局 parentView.addView(discreteSeekBar);
补充说明
离散SeekBar的视觉效果(比如刻度标记、进度条样式)是通过主题中的属性来控制的,ContextThemeWrapper会让View在初始化时使用指定的主题上下文,从而正确加载所有必要的样式属性,这和布局中android:theme的作用一致。
内容的提问来源于stack exchange,提问作者Werner Harnisch
相关产品推荐
相关产品推荐

