以编程方式添加视图时展开水平滚动视图

时间:2014-06-23 06:09:13

标签: android android-linearlayout android-custom-view horizontalscrollview

在以编程方式将视图添加到水平滚动视图时遇到问题。我有一个带有虚线背景的水平滚动视图,并给出了围绕它的线性布局清晰的彩色背景,以帮助理解。

这是以前的视图 Image 1

然后我在拖放事件后向滚动视图添加一个视图:

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));

这导致视图在垂直方向上扩展: enter image description here

我试图通过在滚动视图中根据它应该具有的高度重新设置线性布局的布局参数来解决这个问题:

ViewGroup.LayoutParams p = timeline.getLayoutParams();
p.height = timelineHeight;
timeline.setLayoutParams(p);

导致滚动视图仍然展开但内容大小合适的情况: enter image description here

然后我尝试调整滚动视图本身的大小,使其大小与预期相符:

ViewGroup.LayoutParams p2 = timelineScrollView.getLayoutParams();
p2.height = timelineHeight;
timelineScrollView.setLayoutParams(p2);

给出了: enter image description here

保持滚动视图的大小正确,但其他视图的大小缩小并略微位于错误的位置。我想要的是滚动视图保持与第一个图像相同,无需移动。它可能是基本的东西,但我不能让我的生活找出我做错的行为。

该区域的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 个答案:

答案 0 :(得分: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>`

我希望这可以帮助那些以某种方式犯同样错误的人。