2013-11-26 93 views
0

当我在onCreate()中创建Activity并设置新的RelativeLayout时,所有工作都正常。 但我认为创建一个扩展RelativeLayout的类MView并进行所有设置会更方便。如果我这样做,活动保持空白。我应该改变什么MView(或者我需要使用RelativeLayout而不需要扩展名)?无法将自定义布局动态添加到活动

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

RelativeLayout mLayout = new RelativeLayout(this);//Change this to MView mLayout=new MView(this); 
//I've been trying to move text from here... 
TextView tv = new TextView(this); 
tv.setText("TestText"); 
tv.setTextAppearance(this, android.R.attr.textAppearanceSmall); 

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT); 
lp.addRule(RelativeLayout.CENTER_IN_PARENT); 

tv.setLayoutParams(lp); 

mLayout.addView(tv); 
//... to here to MView class that extends RelativeLayout 

RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.MATCH_PARENT, 
     RelativeLayout.LayoutParams.MATCH_PARENT); 

setContentView(mLayout, rlp); 
} 

所以,MView的构造函数代码为:

public MView(Context context) { 
    super(context); 
    TextView tv = new TextView(context); 
    tv.setText("TestText"); 
    tv.setTextAppearance(context, android.R.attr.textAppearanceLarge); 

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lp.addRule(RelativeLayout.CENTER_IN_PARENT); 

    tv.setLayoutParams(lp); 

    this.addView(tv); 
} 

而且的onCreate变成这样:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    MView mLayout = new MView(this); 

    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT); 

    setContentView(mLayout, rlp); 
} 
+0

尝试不添加LayoutParams setContentView。使用setContentView(mLayout); – Sipka

+0

代码是否在工作代码之上,还是代码错误?也许发布你的MView布局初始化代码。 –

+0

setContentView(mayout)仍然不显示任何内容。 – fresheed

回答

0
  1. 这是更好地设置布局parmas直接视图,而不是当你添加另一个布局。
  2. 在你的情况下,现在设置错误的文本添加规则。

更正代码:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     RelativeLayout mLayout = new RelativeLayout(this); 
     RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.MATCH_PARENT, 
       RelativeLayout.LayoutParams.MATCH_PARENT); 

     mLayout.setLayoutParams(rlp); 
     TextView tv = new TextView(this); 
     tv.setText("TestText"); 
     tv.setTextAppearance(this, android.R.attr.textAppearanceSmall); 
     RelativeLayout.LayoutParams rlt = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
     rlt.addRule(RelativeLayout.CENTER_IN_PARENT); 
     tv.setLayoutParams(rlt); 

     mLayout.addView(tv); 
     setContentView(mLayout); 
} 
+0

感谢您的建议,但是您能否告诉我为什么要在onCreate中执行所有设置? – fresheed

0

这是非常简单的。当我创建MView时,我的onLayout实现是空的。很显然,我不得不写

super.onLayout(arg0, arg1, arg2, arg3, arg4); 

它工作得很好。感谢您的帮助:)