2010-01-08 4 views
-1

J'ai créé un ButtonField avec une largeur calculée automatiquement. La largeur du bouton sera déterminée en fonction du nombre d'autres boutons de son HorizontalFieldManager (HFM). Donc, s'il y a 3 boutons, chaque bouton sera d'environ 33% de la largeur. S'il y a 5 boutons, chacun aura environ 20% de la largeur, etc ... Fondamentalement, tous les boutons ont la même largeur.Blackberry - getPreferredWidth ignoré dans 4.5?

Le code ci-dessous fonctionne correctement sous JDE 4.7 (testé avec le simulateur Storm). Mais lorsqu'elle est exécutée sous JDE 4.5 (le simulateur 8330), ma valeur getPreferredWidth() semble être ignorée. La largeur d'affichage sur les deux appareils est de 320 et j'ajoute 4 boutons au HFM. La largeur est calculée à 80 et chaque bouton à 80 sous 4.7. Sous 4,5, j'obtiens 3 boutons d'environ 96 et le dernier est d'environ 24.

Le texte de chaque bouton est différent, ce qui peut être à l'origine du problème. Voici le code:

public class AutoWidthButtonField extends ButtonField 
{ 
    AutoWidthButtonField(String label, long style) { super(label, style); } 

    public int getPreferredWidth() 
    { 
     Manager parent = this.getManager(); 
     int fields = parent.getFieldCount(); 

     int width = (Display.getWidth()/fields); 
     return width; 
    } 

    /* 
    protected void layout(int width, int height) 
    { 
     super.layout(width, height); 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
    } 
    */ 
} 

La mise en page est maintenant mise en commentaire, mais elle ne change pas le comportement. Je l'utilise comme ceci:

HorizontalFieldManager nav = new HorizontalFieldManager(); 
nav.add(new AutoWidthButtonField("B1", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("Opt 2", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("Test", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("...", ButtonField.CONSUME_CLICK)); 

Qu'est-ce que je fais mal sous 4.5? Merci!

Répondre

1

J'ai essayé votre code sur 4.7, 4.6, 4.5 et 4.3 et votre méthode getPreferredWidth() renvoie ce qui est attendu. Je devine que quelque chose ne va pas avec votre simulateur. Par exemple, j'ai eu des problèmes de connexion via HTTP avec ce simulateur "BlackBerry Device Simulators v4.5.0.81" mais je n'ai eu aucun problème avec celui-ci "BlackBerry Device Simulators v4.5.0.52 (8310)".

Remarque: J'ai testé votre code dans Eclipse & le plug-in BB.

+0

Merci d'avoir essayé. Vos résultats sont intéressants puisque je le vois sur deux appareils réels ainsi que sur le simulateur. Je vais continuer à creuser pour voir si c'est quelque chose avec une version spécifique du système d'exploitation. Merci! – PatrickSteele