Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Поместить пользовательский компонент в ScrollView

#android #java


У меня есть своя вьюшка, в которой переопределяется onDraw и с помощью 2D-графики
на canvas рисуется мой "компонент". Я хотел бы добавить возможность её скроллить (горизонтально
и вертикально). Я переопределил onMeasure:
@Override 
protected void onMeasure(int width, int height) { 
  width = MeasureSpec.getSize(width); 
  height = MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY); 
  // в статье вместо этой строки super.onMeasure(width, height); 
  // но так совсем не работает
  setMeasuredDimension(width, height);
}

Код использования скроллера такой:
ScrollView scroller = new ScrollView(context);
scroller.setLayoutParams(new LinearLayout.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,
WindowManager.LayoutParams.FILL_PARENT));
scroller.setFillViewport(true);
CustomView view = new CustomView(context);
view.setLayoutParams(new LinearLayout.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,
WindowManager.LayoutParams.MATCH_PARENT));
view.setVerticalScrollBarEnabled(true);
scroller.setScrollbarFadingEnabled(false);
scroller.addView(view);

Параметры LayoutParams меняю по-разному, но всё равно результата нет.
Этот пример я взял из статьи. Но не совсем понятно:

Как быть, если я не могу использовать константу (в примере - 300), потому что моя
компонента будет занимать область, оставшуюся от других компонентов (могут быть абсолютно
разных размеров). Т.е. может, можно туда поставить FILL_PARENT?
Размеры пользовательской компоненты могут меняться. Что нужно сделать, чтобы сказать
скроллеру, что компонента внутри него изменила размеры?
Как заставить скроллеры отображаться? Что здесь пропущено?
    


Ответы

Ответ 1



По поводу константы в 300, Вы можете убрать ее и использовать передаваемый в onMeasure() параметр height. FILL_PARENT и WRAP_CONTENT имеют специальные значения, можно и правда попробовать поставить их. Можно попробовать создавать вашу вьюшку в xml и определить свойство scrollbars(может помочь). А вообще, думаю Вам стоит обратить внимание на данный пример, либо другой из данного репозитория. По крайней мере, в коде по ссылке переопределяются все нужные вам методы + скроллинг. Используйте как пример, либо найдите другой кастомный компонент(благо на Google Code их хватает).

Комментариев нет:

Отправить комментарий