我想以编程方式向我的自定义视图添加滚动条。在棒棒糖之前,这是在构造函数中完成的,如下所示:
setHorizontalScrollBarEnabled(true);
setVerticalScrollBarEnabled(true);
TypedArray a = context.obtainStyledAttributes(R.styleable.View);
initializeScrollbars(a);
a.recycle();
(see here)
现在随着Lollipop的推出,Google将initializeScrollbars()
API设为私有,因此它不再可用(see here)
所以人们只有suggested才能手动导入initializeScrollbars()
并调用它,就像这样:
final TypedArray a = context.getTheme().obtainStyledAttributes(new int[0]);
try {
// initializeScrollbars(TypedArray)
Method initializeScrollbars = android.view.View.class.getDeclaredMethod("initializeScrollbars", TypedArray.class);
initializeScrollbars.invoke(this, a);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
a.recycle();
这可以解决问题,但当然是黑客。
这是否意味着在引入棒棒糖和删除initializeScrollbars()
超过4年后,仍然无法以编程方式将滚动条添加到自定义视图中,并且唯一可行的安全方法是膨胀XML还是同时有一个干净的解决方案?
很难想象Google会删除initializeScrollbars()
而不提供一种替代方法来完成其工作...尤其是因为距今已有4年,并且向自定义视图添加滚动条似乎是一项很常见的任务所以我真的很困惑,为什么这显然很难以编程方式实现。