2011-06-16 208 views
2

我创建了一个自定义视图。其中,一条线,一条文本视图,另一条线。在底线之下,我想放置一个新的水平方向的线性布局。当我运行它时,这个嵌套的线性布局似乎根本不显示出来。相反,我可以在底线下方看到测试按钮。我究竟做错了什么?自定义视图:嵌套linearlayout没有显示

public class MyView extends LinearLayout { 

     public MyView(Context context, Question question) { 
      super(context); 



    //  this.setLayoutParams(params); 
      this.setOrientation(VERTICAL); 
      this.setBackgroundColor(Color.WHITE); 
      LinearLayout.LayoutParams lineParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 2); 
      View topLine = new View(context); 
      lineParams.setMargins(0, 15, 0, 0); 
      topLine.setBackgroundColor(Color.argb(255, 0, 159, 218)); 
      topLine.setLayoutParams(lineParams); 

      this.addView(topLine); 

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

      //Challenge Question 
      TextView questionText = new TextView(context); 
      questionText.setTextColor(Color.BLACK); 
      questionText.setTextSize(14); 
      questionText.setLayoutParams(params); 
      questionText.setGravity(Gravity.CENTER_HORIZONTAL); 
      questionText.setText(question.getQuestion()); 

      this.addView(questionText); 

      View bottomLine = new View(context); 
      bottomLine.setBackgroundColor(Color.argb(255, 0, 159, 218)); 
      bottomLine.setLayoutParams(lineParams); 


      this.addView(bottomLine); 

      LinearLayout innerLayout = new LinearLayout(context); 
      LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(300, LayoutParams.WRAP_CONTENT); 
      innerLayout.setLayoutParams(innerLayoutParams); 
      innerLayout.setBackgroundColor(Color.RED); 
      innerLayout.setOrientation(HORIZONTAL); 


      //TableLayout for the multiple choices 
      TableLayout tableLayout = new TableLayout(context); 
      LayoutParams tableLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    //  tableLayoutParams.weight = .8f; 
      tableLayout.setBackgroundColor(Color.RED); 
      tableLayout.setLayoutParams(tableLayoutParams); 


      innerLayout.addView(tableLayout); 
      this.addView(innerLayout); 

      Button button = new Button(context); 
      button.setLayoutParams(params); 
      button.setText("testing 123"); 
      this.addView(button); 
} 

请注意,我粘贴的代码没有添加到tablelayout的所有东西。我可能应该也粘贴了。但是当我这样做的时候它也不起作用。但无论哪种方式,如果我将嵌套的linearlayout设置为300宽度并为其设置红色背景颜色,我至少应该看到它,不是吗?

回答

1

想想内部布局的高度应该是多少。现在它是wrap_content并包含一个TableLayout(没有行),其高度也设置为wrap_content。在内部布局中似乎没有任何东西给它一个高度尺寸,所以这可能是它没有被显示的原因。

尝试以下会让你的布局可见:

LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(300, 300); 

更有效,你可以尝试添加一些与真实的宽度/高度的TableLayout

还可以考虑用XML编写布局到better separate your application logic and the presentation

+1

是的,正如我所说的,当我向tablelayout添加内容时它没有工作,但是我即将在xml中创建tablelayout并将其添加到我的自定义视图中。它很高兴能够灵活地混合和匹配程序化视图与基于xml的视图 – LuxuryMode 2011-06-16 19:34:47