2014-05-02 69 views
0

我在我的TableLayout中放置了60个按钮,这些按钮超出了屏幕,因此我需要滚动才能显示剩余的按钮。我试过这段代码,但应用程序不工作。以编程方式滚动TableLayout

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

+0

你能不能添加R.layout.activity_main的xml代码?所以我可以看到是否有错误 –

回答

2

有几种解决方案,主要的问题是,你在呼唤setContentView()多次,有一次还用super.

来做到这一点是删除了滚动码的最好办法:

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

并直接将其添加到布局文件R.layout.activity_main,应该这样做。

0
// 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 
+0

我试过这个,但它不工作。 :/ 我在布局层次结构的顶部有一个'LinearLayout'。我应该删除它还是使用另一种布局类型进行更改以使此代码有效? – Blast

+0

不要忘记删除这一行“setContentView(R.layout.activity_main);” –

+0

只是尝试用我的代码替换你的onCreate(),看看会发生什么? –