Я хочу добавить полосы прокрутки в мой пользовательский вид программно.До Lollipop это было сделано в конструкторе следующим образом:
setHorizontalScrollBarEnabled(true);
setVerticalScrollBarEnabled(true);
TypedArray a = context.obtainStyledAttributes(R.styleable.View);
initializeScrollbars(a);
a.recycle();
( см. Здесь )
Теперь, с введением Lollipop, Google сделал initializeScrollbars()
API закрытый, поэтому он больше недоступен (см. Здесь)
Поэтому люди предложили просто импортировать 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();
Это делает трюк, но, конечно, это взлом.
Значит ли это, что более чем через 4 года после введения Lollipop и удаления initializeScrollbars()
программно все еще невозможнодобавить полосы прокрутки в настраиваемое представление, и что единственный безопасный способ сделать это - накачать XML или есть чистое решение, чтобы сделать это в это время?
Трудно представить, чтобы Google удалил initializeScrollbars()
, не предоставив альтернативного способа сделать то, что он делает ... тем более, что прошло уже 4 года, и добавление полос прокрутки в пользовательское представление выглядит довольно распространеннымзадача, поэтому я действительно озадачен, почему это так сложно достичь программным путем.