2010-12-09 39 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); 
} 

que je dois faire quelque chose comme ça .. il afficherait commeCréer une nouvelle TextView programme puis de l'afficher en dessous un autre TextView

one 
two 
asdfasdfsomething 

sur l'écran ..

+1

En bref, quel est le problème avec votre code? Qu'est-ce qui ne fonctionne pas? Btw, s'il s'agit d'une activité, utilisez simplement 'this' au lieu de' getApplicationContext() '. – EboMike

+0

le titre de votre question dit "affichez-le _support_d'un autre textview" mais votre question indique différemment, avec tous les textes dans une rangée - s'il vous plaît clarifier ou formater le texte de la question en conséquence. –

+0

La question n'a pas été formatée correctement - j'ai corrigé cela. (Il n'est probablement pas intuitif que les retours à la ligne soient engloutis) – EboMike

Répondre

2

Vous êtes n'attribuant aucun id à la vue de texte, mais vous utilisez tv.getId() pour le passer à la méthode addRule en tant que paramètre. Essayez de définir un ID unique via tv.setId(int).

Vous pouvez également utiliser LinearLayout avec une orientation verticale, ce qui pourrait être plus facile en réalité. Je préfère LinearLayout sur RelativeLayouts si ce n'est pas nécessaire autrement.

+0

Comment pouvez-vous attribuer un identifiant unique par programmation? Je veux dire comment être sûr que ce sera unique, quand vous ne saurez jamais les valeurs des identifiants dans xml, et les identifiants à venir –

+0

Vous connaîtrez les valeurs des identifiants en XML, pourquoi pas vous? Faire des identifiants comme 'thisKindofElem001',' thisKindofElem002' etc – fiatjaf

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; 
      } 
     }); 
    } 

Ceci peut être modifié pour afficher chaque élément d'un tableau String dans différents TextViews.

56

S'il est important de ne pas utiliser un RelativeLayout, vous pouvez utiliser un LinearLayout et faire:

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

Cela vous permet d'éviter la méthode de addRule que vous avez essayé. Vous pouvez simplement utiliser addView() pour ajouter de nouveaux TextViews.

Code complet:

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); 
} 
+4

Down-électeurs, soin d'expliquer? – WeNeigh

+3

N'utilisez pas le contexte d'application pour créer des vues. Utilisez le contexte d'activité. – bryn

+0

Merci. actualisé. – WeNeigh

15

Essayez ce code:

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]); 
} 
+0

Comment définir rl dans le fichier activity_main.xml? – gimmegimme