2010-10-11 7 views

Répondre

3
final TextView upperTxt = (...) 
upperTxt.setId(12345); 

final TextView lowerTxt = (...); 
final RelativeLayout.LayoutParams params = RelativeLayout.LayoutParams(this, null); 
params.addRule(RelativeLayout.BELOW, 12345); 
lowerTxt.setLayoutParams(params); 
0

Voici ma solution pour mon problème particulier.

Dans le cas où le nom d'utilisateur ne serait pas trouvé dans la base de données je devais créer un RelativeLayout qui ressemble à celui généré par xml.

// text view appears on top of the edit text 
enterNameRequest = new TextView(mainActivity.getApplicationContext()); 
// fill the view with a string from strings.xml 
enterNameRequest.setText(mainActivity.getResources().getString(R.string.enterNameRequest)); 

// edit text appears below text view and above button 
enterName = new EditText(mainActivity.getApplicationContext()); 
enterName.setId(667); 

// button appears at the bottom of the relative layout 
saveUserName = new Button(mainActivity.getApplicationContext()); 
saveUserName.setText(mainActivity.getResources().getString(R.string.useUserName)); 
saveUserName.setId(666); 

// generate the relative layout 
RelativeLayout layout = new RelativeLayout(mainActivity.getApplicationContext()); 
layout.setId(668); 

// set a background graphic by its id 
layout.setBackgroundDrawable(mainActivity.getApplicationContext().getResources().getDrawable(R.drawable.background_head_neutral)); 

// runtime told me that i MUST use width and height parameters! 
LayoutParams params2 = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
params2.addRule(RelativeLayout.ABOVE, 666); 
enterName.setLayoutParams(params2); 

LayoutParams params3 = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
params3.addRule(RelativeLayout.ABOVE, 667); 
enterNameRequest.setLayoutParams(params3); 

LayoutParams params4 = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
params4.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 668); 
saveUserName.setLayoutParams(params4); 

// add views 
layout.addView(enterNameRequest); 
layout.addView(enterName); 
layout.addView(saveUserName); 

/* todo: set button action */ 

mainActivity.setContentView(layout); 

Ce que j'ai découvert plus: Il est pas si bon de manipuler manuellement la mise en page à partir de java!

Vous devriez mieux utiliser une nouvelle activité et définir une nouvelle mise en page.

De cette façon, le code d'application est plus lisible! J'ai même essayé de définir plusieurs mises en page (pas manuellement, mais avec setContentView) en une seule activité, et il s'est avéré que je ne savais pas où accéder à quoi d'autre ... En outre, j'ai eu un gros problème dans ajoutant onClickListeners ... donc vous une meilleure utilisation - android: onclick = « myButtonMethod » - dans votre balise de bouton dans le fichier XML et une méthode dans votre activité en fonction, qui utilise la mise en page, comme ceci:

public void myButtonMethod(View v){ 
    // do stuff 
} 

Cela améliore les performances car vous n'utilisez pas d'autres récepteurs, mais vous utilisez le programme d'écoute déjà disponible qui est lié à votre activité dans tous les cas.

0

u pouvez essayer cette

LinearLayout.LayoutParams leftMarginParams = new LinearLayout.LayoutParams ( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT), `` leftMarginParams.leftMargin = 50;

Button btn1 = new Button(this); 
    btn1.setText("Button1"); 
    linLayout.addView(btn1, leftMarginParams) 
Questions connexes