【问题标题】:Programmatically Scrollable TableLayout以编程方式可滚动的 TableLayout
【发布时间】:2014-05-02 09:55:51
【问题描述】:

我在TableLayout 中放置了 60 个按钮,这些按钮超出了屏幕,因此我需要滚动来显示剩余的按钮。我已经尝试过此代码,但应用程序无法正常工作。

protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      TableLayout tableLayout;
      tableLayout = (TableLayout) findViewById(R.id.table_layout);
      TableRow tr;
      int buttonNumber = 0;
      for (int i =0;i<30;i++)
      {
         tr = new TableRow(this);
         for (int j =0;j<2;j++)
         {
            buttonNumber++;
            final Button btn = new Button(this);
            btn.setText("Button" + (buttonNumber));
            btn.setTag(buttonNumber);
            btn.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.MATCH_PARENT,1));
                btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            });
                tr.addView(btn);

         }
                tableLayout.addView(tr);
     }
            ScrollView sv = new ScrollView(this);
            sv.addView(tableLayout);
            super.setContentView(sv);
}

如何以编程方式创建可滚动的TableLayout

【问题讨论】:

  • 能否也添加R.layout.activity_main的xml代码?这样我就可以看看那里是否也有错误

标签: android android-layout android-studio


【解决方案1】:

有几种解决方案,主要问题是您多次调用setContentView(),一次还使用super.

最好的方法是删除 ScrollView 代码:

ScrollView sv = new ScrollView(this);
sv.addView(tableLayout);
super.setContentView(sv);

直接在布局文件R.layout.activity_main中添加,应该就可以了。

【讨论】:

    【解决方案2】:
    // try this way,hope this will help you...
    
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       TableLayout tableLayout = new TableLayout(this);
       int buttonNumber = 0;
            for (int i =0;i<30;i++)
            {
                TableRow tr = new TableRow(this);
                for (int j =0;j<2;j++)
                {
                    buttonNumber++;
                    final Button btn = new Button(this);
                    btn.setText("Button" + (buttonNumber));
                    btn.setTag(buttonNumber);
                    btn.setLayoutParams(new TableRow.LayoutParams(0,TableRow.LayoutParams.MATCH_PARENT,1f));
                    btn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(MainActivity.this,String.valueOf((Integer)view.getTag()),Toast.LENGTH_SHORT).show();
                        }
                    });
                    tr.addView(btn);
    
                }
                tableLayout.addView(tr);
            }
            ScrollView sv = new ScrollView(this);
            sv.addView(tableLayout);
            setContentView(sv);
    }
    
    ![enter image description here][1]
    [1]: http://i.stack.imgur.com/3qLk1.png
    

    【讨论】:

    • 我已经尝试过了,但它不起作用。 :/我在布局层次结构的顶部有一个LinearLayout。我应该删除它还是使用其他布局类型更改它以使此代码正常工作?
    • 别忘了删除这行“setContentView(R.layout.activity_main);”
    • 试着用我的代码替换你的 onCreate() 看看会发生什么?
    • 我已删除 setContentView(R.layout.activity_main) 还尝试复制您的代码仍然无法正常工作。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2011-01-15
    相关资源
    最近更新 更多