Динамическое относительное расположение внутри прокрутки - PullRequest
0 голосов
/ 19 октября 2018

Я добавляю динамический контент через Java в относительную схему, которая находится внутри ScrollView:

<ScrollView
    android:layout_below="@id/btn_draw_route"
    android:id="@+id/layout_scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:layout_alignParentBottom="true">

    <RelativeLayout
        android:id="@+id/layout_route"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </RelativeLayout>

</ScrollView>

По какой-то причине содержимое внутри прокрутки не прокручивается.

Iя добавляю содержимое следующим образом:

Button mButton = new Button(this);

mButton.setText(String.valueOf(singleStep.getId()));
mButton.setId(View.generateViewId());
mButton.setOnClickListener(new MyClickListener(singleStep.getId()));

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);

lp.bottomMargin = 10;
lp.topMargin = 10;
lp.leftMargin = 10;
lp.rightMargin = 10;
lp.addRule(RelativeLayout.CENTER_HORIZONTAL);

// Add to relativeLayout
mRouteLayout.addView(mButton, lp);

Я уже пытался вызвать mScrollLayout.invalidate ();после добавления контента, но это не помогает.Что я заметил, так это то, что если я не установил android: fillViewport = "true" в просмотре прокрутки, его высота будет очень низкой и будет отображаться только часть относительного макета.

Если я установлю высоту относительной отметки, например, 2000dp, контейнер будет прокручиваться, но отображает только небольшую часть реального содержимого относительной отметки.

Редактировать: Может быть важно: содержимое добавляется снизу вверх, каждый с таким атрибутом, как

lp.addRule(RelativeLayout.ABOVE, button2.getId(););

1 Ответ

0 голосов
/ 19 октября 2018

Если я правильно помню, если вы добавляете свои представления программно, вам нужно вызвать метод requestLayout (), чтобы обновить представление для работы wrap_content

просто выполните:

mRouteLayout.requestLayout();
...