2012-02-27 3 views
0

Je dois changer la taille d'un ButtonField. C'est à l'intérieur d'un VerticalFieldManager qui est le seul VFM dans la MainPage.Définir la hauteur d'un ButtonField

J'ai déjà changé sa largeur avec succès (en remplaçant setPreferredWidth() était suffisant). Cependant, j'ai de la difficulté à changer sa hauteur.

Jusqu'à présent, j'ai remplacé setPreferredHeight() et il n'a rien fait. J'ai essayé la mise en page remplaçant comme celui-ci (a essayé toutes les permutations de lignes): commentaires

protected void layout(int arg0, int arg1) 
{ 
    //super.layout(myDesiredWidth, myDesiredHeight); 
    //setExtent(myDesiredWidth, myDesiredHeight); 
} 

J'ai aussi essayé de sublayout remplaçant son directeur (le vfm) comme ceci:

protected void sublayout(int arg0, int arg1) 
{ 
    super.sublayout(arg0, arg1); 
    ButtonField myButton = (ButtonField)getField(1); 
    layoutChild(myButton,myDesiredWidth,myDesiredHeight); 
} 

Il n » ai pas t travail. Je ne suis toujours pas sûr de savoir comment ces méthodes de mise en page et de sublayout fonctionnent en arrière-plan, mais je suis sûr que quelqu'un devait modifier la taille d'un bouton avant moi.

Modifier: Je serai plus précis. J'utilisais BB JRE 6.0 et redéfinissant getPreferredHeight() et layout() était bogué (changer la hauteur modifierait énormément la largeur, d'autres champs autour de mon bouton perdraient leur texte etc.). J'ai essayé BB JRE 5.0 et en augmentant la hauteur travaillée mais la diminution n'a pas fonctionné. Quoi qu'il en soit, j'ai beaucoup googlé et je n'ai pas pu trouver une réponse claire, je suppose que je dois créer mon propre champ personnalisé et implémenter la méthode de peinture à partir de zéro.

Répondre

1

voir cet échantillon Classe:

public class Abc extends MainScreen 
{ 
ButtonField clickButton; 
public Abc() 
{ 
    createGUI();  
} 
public void createGUI() 
{ 
    clickButton=new ButtonField("Click Here", Field.FIELD_HCENTER) 
    { 
     protected void layout(int width, int height) 
     { 
      setExtent(200, 80); 
     } 
    }; 
    add(clickButton);     
} 
} 

Je reçois comme cette image:

Size of button

Utilisation selon vos besoins;

+0

Dans votre cas , vous n'avez rien d'autre que le bouton lui-même. Dans mon cas, j'ai ceux: MainPage -> VMF -> HFM, bouton, HFM, HFM. Lorsque je redéfinir layout() et utiliser setExtent(), sa machine virtuelle ne peut pas définir la mise en page correctement. – mostruash

+1

Somany VFM ou HFM pas de problème, si vous voulez faire quelque chose à particulier labelField, buttonField, HFM ou n'importe quel champ, alors leur méthode de remplacement que vous devez utiliser, alors seulement cela fonctionne pour un champ particulier seulement; – alishaik786

1

L'écran Blackberry fonctionne de la façon suivante.

  1. Le gestionnaire de délégué d'un écran se présente lui-même.
  2. Le gestionnaire de délégué demande aux autres champs et aux gestionnaires de mettre en page.
  3. Les gestionnaires ajoutés au gestionnaire de délégué s'affichent et demandent à ses champs ou gestionnaires enfants de les mettre en forme.
  4. Ce processus se poursuit jusqu'à ce que tous les champs soient affichés.

Vous souhaitez mettre en page un champ de bouton faisant partie d'un gestionnaire. Selon les règles ci-dessus, vous devez remplacer la méthode de mise en page du champ de bouton uniquement. Comme l'a dit alishaik786, vous n'avez pas besoin de mettre en page le gestionnaire ou autre chose que le buttonField.

Un exemple simple d'un champ de bouton personnalisé est donnée ici à http://www.coderholic.com/blackberry-custom-button-field/

Si vous regardez le code que vous pouvez voir les méthodes overrided suivantes qui sont nécessaires pour la pose le champ lui-même

public int getPreferredWidth() 
{ 
    return fieldWidth; 
} 

public int getPreferredHeight() 
{ 
    return fieldHeight; 
} 

protected void layout(int arg0, int arg1) 
{ 
    setExtent(getPreferredWidth(), getPreferredHeight()); 
} 

Une fois que vous avez défini les fieldWidth et fieldHeight dans le constructeur, vous pouvez renvoyer ces valeurs pour getPreferredWidth() et getPreferredHeight() respectivement.

la layout() du champ est appelé, lorsque le champ est aménagé qui fixera l'étendue du champ à fieldWidth et fieldHeight