Blackberry VerticalFieldManager avec taille fixe : problème de Défilement
Je suis d'essayer d'avoir un plein écran de l'INTERFACE utilisateur avec un correctif de l'en-tête ( gestionnaire avec quelques champs) et un défilement de contenu (une liste de champ personnalisé). L'idée est d'imiter une sorte de liste déroulante.
Pour ce que j'ai fait une coutume VerticalFieldManager qui acceptent une maxHeight (la hauteur de l'écran - l'en-tête de la hauteur).
J'ai eu les problèmes suivants:
- Les flèches de défilement n'apparaissent pas (jamais)
- Sur OS 4.7 (la Tempête), je peux faire défiler plus bas que le dernier élément, jusqu'à ce que n'ayant rien sur mon écran, mais l'en-tête.
Mon code pour compiler avec la JDE 4.2.1 & 4.7 et à l'exécution de la Perle et de la Tempête. (au pire je pourrais avoir deux version de cette classe)
Je soupçonne que les deux problèmes sont liés. J'ai probablement fait quelque chose de mal. J'ai regardé quelques exemple/forum et toujours trouvé de solution similaire/code.
Les gars, vous ne pouvez me dire ce que j'ai fait de mal?
/**
* custom class, so we can set a max height (to keep the header visible)
*/
class myVerticalFieldManager extends VerticalFieldManager{
private int maxHeight = 0;
myVerticalFieldManager(int _maxHeight){
super(
//this provoc an "empty scrollable zone" on Storm
//but if you don't put it, on other OS, the vertical manager does not scroll at all.
Manager.VERTICAL_SCROLL
| Manager.VERTICAL_SCROLLBAR
);
maxHeight = _maxHeight;
}
protected void sublayout(int width, int height){
super.sublayout(width, getPreferredHeight());
setExtent(width, getPreferredHeight());
}
public int getPreferredWidth() {
return Graphics.getScreenWidth();
}
/**
* allow the manager to use all the given height. (vs auto Height)
*/
public boolean forceMaxHeight = false;
public int getPreferredHeight() {
if (forceMaxHeight) return maxHeight;
int m = super.getPreferredHeight();
if (m > maxHeight) m = maxHeight;
return m;
}
////////////////////////////////////////////////////////////////////////////
protected boolean isUpArrowShown(){
//TODO: does not seem to work (4.2.1 emulator & 4.5 device). (called with good return value but the arrows are not painted)
int i = getFieldWithFocusIndex();
//Trace("isUpArrowShown " + i);
return i > 0;
//note: algo not correct, cause the up arrow will be visible event when no field are hidden.
// but not so bad, so the user "know" that he can go up.
}
protected boolean isDownArrowShown(){
int i = getFieldWithFocusIndex();
return i < getFieldCount();
}
////////////////////////////////////////////////////////////////////////////
//note : since 4.6 you can use
//http://www.blackberry.com/developers/docs/4.6.0api/net/rim/device/api/ui/decor/Background.html
public int myBackgroundColor = 0xffffff;
protected void paint(Graphics g){
g.setBackgroundColor(myBackgroundColor);
//Clears the entire graphic area to the current background
g.clear();
super.paint(g);
}
}
toute aide est la bienvenue.
OriginalL'auteur Loda | 2009-11-02
Vous devez vous connecter pour publier un commentaire.
donc,
Je suis venu avec cette solution de contournement pour le "vide de défilement de la zone" problème sur la TEMPÊTE
c'est moche et ne permet pas une coutume ScrollChangeListener, mais il travaille sur Pearl & Tempête
Je suis toujours à la recherche d'une solution pour les flèches de défilement problème...
Si quelqu'un a une idée...
OriginalL'auteur Loda
Vous pouvez utiliser la méthode
setBanner()
au lieu de l'ajouter à votre en-tête. Ensuite, vous pouvez ajouter une valeur par défautVerticalFieldManager
à l'écran et faire défiler normalement, mais qui ne doit pas masquer l'en-tête. Notez que leMainScreen
délégué manager est unVerticalScrollManager
de sorte que vous ne pourriez pas besoin d'une deuxièmevfm
....
OriginalL'auteur SamuelD
Hey j'ai fait la même chose à l'aide d'un HorizontalFieldManager qui contient une image et un titre
OriginalL'auteur Swati