以编程方式在RelativeLayout中设置EditText和TextView的位置

时间:2012-02-01 10:41:19

标签: android android-layout relativelayout

我在main.xml中定义了RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</RelativeLayout>

在onCreate中以编程方式添加TextView和EditText:

public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.main);

addContentView(customGlView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

addContentView(myTextView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addContentView(myEditText, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}

它们都出现,但在左上角重叠。我花了好几个小时来弄清楚如何将它们放在彼此下方,或者在屏幕的左角放置一个,在右角放置另一个。如果我通过main.xml添加它们,它们都不会显示出来。任何人都可以给我一个正确方向的暗示吗?

3 个答案:

答案 0 :(得分:2)

对于RelativeLayout,您需要使用LayoutParams指定元素的相对位置:

myTextView.setId(1);
myEditText.setId(2);

addContentView(myTextView, new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
params.addRule(RelativeLayout.BELOW, myTextView.getId());
addContentView(myEditText, params);

答案 1 :(得分:1)

向LayoutParams添加一条规则,将一个textview设置在另一个之下..

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

TextView tv1 = new TextView(this); 
tv1.setId(1); 
tv1.setText("myTextView"); 

params1.addRule(RelativeLayout.BELOW, tv1.getId()); 
TextView tv2 = new TextView(this); 

答案 2 :(得分:0)

我无法通过RelativeLayout解决此问题,但使用LinearLayout完全符合您的要求。

addView(myEditText);

或者您可以使用this method将它们添加到您想要的任何位置。例如,您可以先添加myEditText然后在myEditText上面添加myTextView:

addView(myEditText);
addView(myTextView, 0);