Неужели нет чистого способа программно добавлять полосы прокрутки в пользовательский вид? - PullRequest
0 голосов
/ 21 октября 2018

Я хочу добавить полосы прокрутки в мой пользовательский вид программно.До 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 года, и добавление полос прокрутки в пользовательское представление выглядит довольно распространеннымзадача, поэтому я действительно озадачен, почему это так сложно достичь программным путем.

...