Установить положение EditText и TextView в RelativeLayout программно - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть RelativeLayout, определенный в main.xml:

<?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>

И добавьте TextView и EditText программно в onCreate:

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 ]

2 голосов
/ 01 февраля 2012

Для 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 голос
/ 01 февраля 2012

Добавьте правило в свои LayoutParams, которое будет устанавливать один текстовый вид ниже другого ..

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); 
0 голосов
/ 11 июля 2015

Я не могу решить эту проблему с помощью RelativeLayout, но использование LinearLayout делает именно то, что вы хотите.

addView(myEditText);

Или вы можете использовать этот метод добавить их в любую позицию, которую вы хотите.Например, вы можете сначала добавить myEditText, а затем добавить myTextView выше myEditText:

addView(myEditText);
addView(myTextView, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...