#android #android-linearlayout #android-custom-view #horizontalscrollview
#Android #android-linearlayout #android-пользовательский вид #horizontalscrollview
Вопрос:
У меня возникают проблемы при программном добавлении представлений к горизонтальному виду прокрутки. У меня есть горизонтальный вид прокрутки с пунктирным фоном, и я предоставил линейным макетам вокруг него четкие цветные фоны, чтобы облегчить понимание.
Вот как выглядит представление до
Затем я добавляю представление в вид прокрутки после события перетаскивания:
MemoNodeView mn = new MemoNodeView(this);
mn.setMemo(m);
int time = (int) Math.round(pixelsPerMilliSecond()*m.getTimeLength());
mn.setMemoSize(time, timelineHeight);
timeline.addView(mn, new ViewGroup.MarginLayoutParams(time, timelineHeight));
Это приводит к увеличению размера представления по вертикали:
Я попытался исправить это, повторно установив параметры компоновки линейного макета внутри вида прокрутки на основе высоты, которую он должен был иметь:
ViewGroup.LayoutParams p = timeline.getLayoutParams();
p.height = timelineHeight;
timeline.setLayoutParams(p);
Что приводит к такой ситуации, когда вид прокрутки по-прежнему расширяется, но содержимое имеет правильный размер:
Затем я попытался изменить размер самого вида прокрутки, чтобы размер соответствовал тому, что он должен был:
ViewGroup.LayoutParams p2 = timelineScrollView.getLayoutParams();
p2.height = timelineHeight;
timelineScrollView.setLayoutParams(p2);
что дало:
Оставляя размер вида прокрутки правильным, но размер других представлений уменьшен и немного в неправильном положении. Я хочу, чтобы вид прокрутки оставался таким же, как на первом изображении, и чтобы ничего не перемещалось. Это может быть что-то базовое, но я не могу понять, что я делаю неправильно, чтобы дать такое поведение.
XML для области выглядит следующим образом (обратите внимание, что цвета / текстовые представления являются заполнителями, используемыми для того, чтобы попытаться визуально выделить проблему):
`<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/black_frame"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#ffffff" >
<TextView
android:id="@ id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Small Text" />
</LinearLayout>
<LinearLayout
android:id="@ id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="3"
android:orientation="vertical"
android:paddingLeft="@dimen/toggle_draw_padding"
android:paddingRight="@dimen/toggle_draw_padding" >
<HorizontalScrollView
android:id="@ id/horizontal_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/timeline_dots_bitmap"
android:fillViewport="true">
<LinearLayout
android:id="@ id/timeline_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#F0AA4444" >
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#ffffff" >
<TextView
android:id="@ id/textView2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Small Text" />
</LinearLayout>
</LinearLayout>`
Есть идеи относительно того, что я здесь делаю не так?
Ответ №1:
Я выяснил, что вызвало проблему. Я опубликую здесь на случай, если у кого-то еще возникнет подобная проблема, и это также сводит их с ума…
Линейные макеты с белым фоном имели layout_height="match_parent"
странное поведение при добавлении других представлений. Изменение двух макетов на layout_height="0dip"
решение проблемы. Как показано ниже:
`
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#ffffff" >
<TextView
android:id="@ id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Small Text" />
</LinearLayout>
<LinearLayout
android:id="@ id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="3"
android:orientation="vertical"
android:paddingLeft="@dimen/toggle_draw_padding"
android:paddingRight="@dimen/toggle_draw_padding"
>
<HorizontalScrollView
android:id="@ id/horizontal_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/timeline_dots_bitmap"
android:fillViewport="true"
android:layout_margin="0dip"
android:padding="0dip">
<LinearLayout
android:id="@ id/timeline_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#F0AA4444"
android:layout_margin="0dip"
android:padding="0dip">
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#ffffff" >
<TextView
android:id="@ id/textView2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Small Text" />
</LinearLayout>
</LinearLayout>`
Я надеюсь, что это может помочь любому, кто каким-то образом совершает ту же ошибку, что и я.