2010-10-28 8 views
4

J'essaie de définir par programme ma disposition de programme et d'ajouter un bouton à une certaine position. Je n'utilise pas la mise en page xml comme vue du contenu.Android, mise en page par programmation d'une vue de bouton?

RelativeLayout mainLayout; 
    mainLayout = new RelativeLayout(this); 
    mainLayout.setLayoutParams(new 
LayoutParams(LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT)); 

J'ai ensuite ajouté un bouton que je veux appliquer les propriétés

layout align center 
parent align left 
height 60px 
width 60px 

est ici le bouton jusqu'à

Button BtnNext = new Button(this); 
    BtnNext.setWidth(60); 
    BtnNext.setHeight(60); 
    BtnNext.setFocusable(true); 
    BtnNext.setId(idBtnNext); 
    BtnNext.setText("Next"); 
    mainLayout.addView(BtnNext, 1); 

Hauteur et largeur ne fonctionnent pas correctement.

+1

Pouvez-vous être plus précis sur la façon dont cela ne fonctionne pas correctement? Vous pouvez également envisager d'utiliser DIP au lieu de PX –

+0

Déjà répondu ci-dessous, c'était un problème de densité. La raison pour laquelle je suis confus est parce que l'éditeur de mise en page le définit bien même lorsque je tape les pixels, mais je suppose qu'il fait une détection et une correction automatique du DPI (ou convertit en dip comme mentionné) – Hamid

Répondre

3

Salut, vous pouvez essayer en mettant la mise en page params

RelativeLayout.LayoutParams rel_btn = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    rel_btn.height = 60; 
    rel_btn.width = 60; 
    BtnNext.setLayoutParams(rel_btn); 

vous pouvez également ajouter des règles et s et les marges pour Button en définissant des paramètres de disposition relatifs comme

rel_btn.addRule(RelativeLayout.CENTER_VERTICAL); 
rel_btn.leftMargin = 220; 
2

hauteur et la largeur ne sera pas aussi u souhaité parce que votre n'utilisez pas pixel de densité indépendante (DIP)
La valeur définie ici est en pixel
Vous pouvez convertir le pixel en immersion par
final float scale = getResources().getDisplayMetrics().density;
int dip = (int) (60 * scale + 0.5f);

vous obtiendrez des résultats plus précis