0

I'm having a difficulty adding buttons dynamically to a ScrollView. The code below is adding the buttons BUT there is no scroller. If I'm putting the buttons directly in the XML (not dynamically) it's working and I can scroll down/up.

My view:

<ScrollView android:id="@+id/ScrollView01"
android:layout_width="264dp"
android:layout_height="match_parent"
android:fillViewport="true"
>

    <LinearLayout
        android:id="@+id/buttons"
        android:layout_width="264dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:scrollbars="vertical"
         >         

     ** HERE THE BUTTONS SHOULD BE ADDED DYNAMICALLY **     

    </LinearLayout>

</ScrollView>

The code which adding buttons:

    // create new button
    final Button newbutton = new Button(this);

    // set background color
    newbutton.setBackgroundColor(Color.GRAY);

    // set width and height
    newbutton.setWidth(50);
    newbutton.setHeight(20);

    // set position
    newbutton.setY(((float)numOfButton*20)+20);
    newbutton.setX(100);

    // set text
    newbutton.setText(Integer.toString(numOfButton));

    // create patameter
    final LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT
            );

    //set listener
    android.view.View.OnClickListener buttonListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            // make all the DrawView invisible
            for(View view : comments){
                view.setVisibility(View.INVISIBLE);
            }

            // set the chosen comment visible
            comments.get(numOfButton).setVisibility(View.VISIBLE);

            boardsHandler.setCurrenBoard(numOfButton);
        }};

        newbutton.setOnClickListener(buttonListener);

        // creating a thread to add button
        buttons.post(new Runnable() { 
            @Override
            public void run() {
                buttons.addView(newbutton, p);
            }
        });

Is it something with the LinearLayout.LayoutParams p ?

Thanks!

4

3 回答 3

1

先试试下面的代码

LinearLayout myContainer = findViewById(R.id.layoutId);

当您为视图设置参数时,它们需要与您的小部件的父视图相对应。

LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, 
LinearLayout.LayoutParams.FILL_PARENT);

最后像你一样添加按钮。

试试看它是否有效

于 2013-05-05T18:01:39.317 回答
0

这是一篇相当老的帖子,但我在研究这类问题时很快发现了它。所以无论如何我都会发布答案,也许它会对任何人有所帮助..

我在动态添加按钮的相对布局中遇到了类似的问题。在添加按钮时,我发现了一种手动定义布局大小的解决方法。对于您的情况,添加该行

buttons.getLayoutParams().height = numOfButton*20+40;

buttons.addView(newbutton, p);

可能会有所帮助,尽管它可能不是最好的解决方案。我认为我的错误完全是使用 RelativeLayout,但既然你似乎有同样的问题......有没有想过使用表格布局?

于 2013-07-23T14:55:07.100 回答
0

设置 X 和 Y 位置将不起作用。LinearLayout 垂直或水平布局它的子级,只考虑它们的宽度/高度。

除此之外——你有没有试过buttons.invalidate()在之后打电话buttons.addView(...)。这应该会刷新布局并显示您的新按钮。

于 2013-05-05T18:39:14.990 回答