2010-12-09 3 views
36
String[] textArray={"one","two","asdasasdf asdf dsdaa"}; 
int length=textArray.length; 
RelativeLayout layout = new RelativeLayout(this); 
RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
for(int i=0;i<length;i++){ 
    TextView tv=new TextView(getApplicationContext()); 
    tv.setText(textArray[i]); 
    relativeParams.addRule(RelativeLayout.BELOW, tv.getId()); 
    layout.addView(tv, relativeParams); 
} 

мне нужно сделать что-то вроде этого .. поэтому он будет отображаться какСоздать новую TextView программно затем отобразить его под другим TextView

one 
two 
asdfasdfsomething 

на экране ..

+1

Вкратце, что случилось с вашим кодом? Что не работает? Btw, если это Activity, просто используйте `this` вместо` getApplicationContext() `. – EboMike 2010-12-09 02:33:06

+0

ваш заголовок вопроса говорит: «Покажите это в другом тексте», но ваш вопрос говорит по-разному, со всеми текстами в одной строке - пожалуйста, проясните или отформатируйте текст вопроса соответствующим образом. – 2010-12-09 02:34:52

+0

Вопрос не был отформатирован правильно - я исправил это. (Возможно, не интуитивно понятно, что новые строки поглощаются) – EboMike 2010-12-09 02:40:09

ответ

2

Вы не назначая никакого идентификатора текстовому виду, но вы используете tv.getId(), чтобы передать его методу addRule в качестве параметра. Попробуйте установить уникальный идентификатор через tv.setId(int).

Вы также можете использовать LinearLayout с вертикальной ориентацией, что может быть проще на самом деле. Я предпочитаю LinearLayout над RelativeLayouts, если это не обязательно.

17
public View recentView; 

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

     //Create a relative layout and add a button 
     relativeLayout = new RelativeLayout(this); 
     btn = new Button(this); 
     btn.setId((int)System.currentTimeMillis()); 
     recentView = btn; 
     btn.setText("Click me"); 
     relativeLayout.addView(btn); 


     setContentView(relativeLayout); 

     btn.setOnClickListener(new View.OnClickListener() { 

      @Overr ide 
      public void onClick(View view) { 

       //Create a textView, set a random ID and position it below the most recently added view 
       textView = new TextView(ActivityName.this); 
       textView.setId((int)System.currentTimeMillis()); 
       layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
       layoutParams.addRule(RelativeLayout.BELOW, recentView.getId()); 
       textView.setText("Time: "+System.currentTimeMillis()); 
       relativeLayout.addView(textView, layoutParams); 
       recentView = textView; 
      } 
     }); 
    } 

Это может быть изменено для отображения каждого элемента массива String в разных текстовых редакторах.

56

Если это не так важно использовать RelativeLayout, вы могли бы использовать LinearLayout, и сделать это:

LinearLayout linearLayout = new LinearLayout(this); 
linearLayout.setOrientation(LinearLayout.VERTICAL); 

Делать это позволяет избежать метод addRule вы пробовали. Вы можете просто добавить addView() для добавления новых текстовых элементов.

Полный код:

String[] textArray = {"One", "Two", "Three", "Four"}; 
LinearLayout linearLayout = new LinearLayout(this); 
setContentView(linearLayout); 
linearLayout.setOrientation(LinearLayout.VERTICAL);   
for(int i = 0; i < textArray.length; i++) 
{ 
    TextView textView = new TextView(this); 
    textView.setText(textArray[i]); 
    linearLayout.addView(textView); 
} 
15

Попробуйте этот код:

final String[] str = {"one","two","three","asdfgf"}; 
final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 
final TextView[] tv = new TextView[10]; 

for (int i=0; i<str.length; i++) 
{ 
    tv[i] = new TextView(this); 
    RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams 
     ((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT); 
    params.leftMargin = 50; 
    params.topMargin = i*50; 
    tv[i].setText(str[i]); 
    tv[i].setTextSize((float) 20); 
    tv[i].setPadding(20, 50, 20, 50); 
    tv[i].setLayoutParams(params); 
    rl.addView(tv[i]); 
} 
Смежные вопросы