【问题标题】:How to make buttons scroll-able in Android, programmatically?如何以编程方式在Android中使按钮可滚动?
【发布时间】:2013-12-02 05:58:30
【问题描述】:

我试图在屏幕上创建任意数量的按钮,然后有一种方法可以滚动按钮。 (上/下)

通过一些研究,我发现我应该使用“scrollview”来完成我正在做的事情。所以我已经这样设置了..(完整代码在http://pastebin.com/05mtszi7

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL); 

LinearLayout row = new LinearLayout(this);
row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

Button btnTag = new Button(this);
btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,      LayoutParams.WRAP_CONTENT));

row.addView(btnTag);

ScrollView sc = new ScrollView(this);
sc.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
sc.setFillViewport(true);
sc.addView(row);

layout.addView(sc);

你知道我做错了什么吗?我知道,这可能是非常简单/愚蠢的事情。我已经看遍了,但我肯定在这里忽略了一些重要的东西。一切运行良好,但没有任何滚动。

提前感谢您的帮助。

【问题讨论】:

  • 你有什么问题需要澄清...
  • @HarshitRathi 没有滚动。它基本上是静态的。

标签: java android button scrollview


【解决方案1】:

使用此代码。这会帮助你...

 LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL); 

        TextView menuText = new TextView(this);
        menuText.setText("People");
        menuText.setId(100);
        menuText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        layout.addView(menuText);

        for (int i = 0; i < 10; i++) {

            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));


                Button btnTag = new Button(this);
                btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
                btnTag.setText( " " + i);
                btnTag.setId(1 + (i));
                row.addView(btnTag);

                btnTag.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        String buttonText = "Unknown Person";
                            Button b = (Button) findViewById(v.getId());
                            buttonText = (String) b.getText();

                        TextView tx = (TextView) findViewById(100);
                        tx.setText(buttonText + " pressed.");
                    }
                });


            ScrollView sc = new ScrollView(this);
            sc.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            sc.setFillViewport(true);

            sc.addView(row);

            layout.addView(sc);

            setContentView(layout);

【讨论】:

  • 谢谢,zohreh 的例子向我展示了我做错了什么,我基本上只是添加了 setContentView(layout);最后得到了你发布的内容,我想。我的最终代码在这里。 pastebin.com/gRqGhJLn - 感谢所有提供帮助的人!
【解决方案2】:

试试这个代码:

    ScrollView sc = new ScrollView(this);
    sc.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    sc.setFillViewport(true);

    LinearLayout layout = new LinearLayout(this);
    layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    layout.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout row = new LinearLayout(this);
    row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    Button btnTag = new Button(this);
    btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

    row.addView(btnTag);

    layout.addView(row);
    sc.addView(layout);

这会有所帮助...

【讨论】:

  • 我试过按照你说的做,但是程序一启动就崩溃了。知道为什么吗?
【解决方案3】:

你应该在布局中添加按钮然后布局添加到 scrollview.scrollview 只能有一个孩子。

         LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
                layout.setOrientation(LinearLayout.VERTICAL); 

                TextView menuText = new TextView(this);
                menuText.setText("People");
                menuText.setId(100);
                menuText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                layout.addView(menuText);

                for (int i = 0; i < users_registered; i++) {

                    LinearLayout row = new LinearLayout(this);
                    row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));


                        Button btnTag = new Button(this);
                        btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
                        btnTag.setText(user_name[i] + " " + i);
                        btnTag.setId(1 + (i));
                        row.addView(btnTag);

                        btnTag.setOnClickListener(new View.OnClickListener() {
                            public void onClick(View v) {
                                String buttonText = "Unknown Person";
                                    Button b = (Button) findViewById(v.getId());
                                    buttonText = (String) b.getText();

                                TextView tx = (TextView) findViewById(100);
                                tx.setText(buttonText + " pressed.");
                            }
                        });
    layout.addView(row); 
        }//end loop

                    ScrollView sc = new ScrollView(this);
                    sc.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
                    sc.setFillViewport(true);

                    sc.addView(layout);

                   // layout.addView(sc); 

【讨论】:

  • 这不是我在做的吗?
  • edit:没关系,我知道你在做什么。我解决了我的问题。非常感谢!
猜你喜欢
  • 2015-11-14
  • 1970-01-01
  • 2011-01-15
  • 2015-10-05
  • 2011-09-20
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
相关资源
最近更新 更多