Création de mises en page personnalisées dans BlackBerry

je veux créer un RichTextField en bas de l'écran, pendant que je peins mes propres graphiques personnalisés en haut de l'écran. C'est possible à BlackBerry? Il a essayé de définir un LayoutManager et d'essayer de positionner le RichTextField au bas de l'écran, mais le RichTextField, faire défiler l'écran entier. C'est le code pour le LayoutManager(). Est-ce la bonne façon, ou est-il un autre moyen de faire ce que j'ai mentionné ci-dessus.

class LayoutManager extends Manager 
{

  public LayoutManager() 
  { 
    //construct a manager with vertical scrolling    
    super(VERTICAL_SCROLL);
  }

  //overwrite the nextFocus method for custom navigation  
  protected int nextFocus(int direction, boolean alt)  
  {
        return super.nextFocus(direction, alt);
  }

  protected void sublayout(int width, int height) 
  {
    Field field;
    //get total number of fields within this manager
    int numberOfFields = getFieldCount();     
    int x = 0;
    int y = 0;
    System.out.println("******** Fields: " + numberOfFields + " W/H: " + width + " / " + height );
    for(int i = 0;i < numberOfFields;i++) {
      field = getField(i);      //get the field
      x = 20;
      y = 80;
      System.out.println("******** X/Y: " + x + " / " + y);
      setPositionChild(field, x, y);  //set the position for the field
      layoutChild(field, width, y);  //lay out the field
    }
    setPosition(0, 80);
    setExtent(width, 80);

  }

  public int getPreferredWidth() 
  {
   return 160;
  }

  public int getPreferredHeight() 
  {
    int height= 0;
    int numberOfFields= getFieldCount();

    for(int i= 0; i < numberOfFields; i++) 
    {
        height += getField(i).getPreferredHeight();
    }
    return 160;
  }
}
2
demandé sur Maksym Gontar 2009-09-15 13:16:58
la source

2 ответов

mise à JOUR - personnalisation de la barre de défilement

personnaliser la barre de défilement http://img146.imageshack.us/img146/7775/scroll.png

VerticalFieldManager à la coutume de limitation de taille et de défilement:

class SizedVFM extends VerticalFieldManager {
    int mWidth;
    int mHeight;

    public SizedVFM(int width, int height) {
        super(VERTICAL_SCROLL | VERTICAL_SCROLLBAR);
        mWidth = width;
        mHeight = height;
    }

    public int getPreferredHeight() {
        return mHeight;
    }

    public int getPreferredWidth() {
        return mWidth;
    }

    protected void sublayout(int maxWidth, int maxHeight) {
        super.sublayout(maxWidth, maxHeight);
        setExtent(getPreferredWidth(), getPreferredHeight());
    }

    protected void paint(Graphics graphics) {
        super.paint(graphics);
        if (getVisibleHeight() < getVirtualHeight()) {
            int y1 = 0, y2 = 0, x1 = 0, x2 = 0;
            int scrollOff = getVerticalScroll();
            if (scrollOff > 0) {
                y1 = scrollOff + 12;
                y2 = scrollOff + 2;
                x1 = getVisibleWidth() - 20;
                x2 = getVisibleWidth() - 2;

                graphics.setColor(Color.DARKRED);
                int[] xPts = new int[] { x1, x2, x1 + 9 };
                int[] yPts = new int[] { y1, y1, y2 };
                graphics.drawFilledPath(xPts, yPts, null, null);
            }
            if (scrollOff < (getVirtualHeight() - getVisibleHeight())) {
                y1 = scrollOff + getVisibleHeight() - 12;
                y2 = scrollOff + getVisibleHeight() - 2;
                x1 = getVisibleWidth() - 20;
                x2 = getVisibleWidth() - 2;
                graphics.setColor(Color.DARKRED);
                int[] xPts = new int[] { x1, x2, x1 + 9 };
                int[] yPts = new int[] { y1, y1, y2 };
                graphics.drawFilledPath(xPts, yPts, null, null);
            }
        }
    }
}

champs pour la peinture et le texte:

class HeaderPainting extends SizedVFM {
    BitmapField mBitmapField;
    public HeaderPainting(Bitmap bitmap, int width, int height) {
        super(width, height);
        add(mBitmapField = new BitmapField(bitmap, FOCUSABLE));
    }
}
class FooterText extends SizedVFM {
    ExRichTextField mTextField;
    public FooterText(String text, int width, int height) {
        super(width, height);
        int bgColor = Color.SANDYBROWN;
        int textColor = Color.DARKRED;
        add(mTextField = new ExRichTextField(text, bgColor, textColor));
    }
    class ExRichTextField extends RichTextField {
        int mTextColor;
        int mBgColor;
        public ExRichTextField(String text, int bgColor, int textColor) {
            super(text);
            mTextColor = textColor;
            mBgColor = bgColor;
        }
        protected void paint(Graphics graphics) {
            graphics.clear();
            graphics.setColor(mBgColor);
            graphics.fillRect(0, 0, getWidth(), getHeight());
            graphics.setColor(mTextColor);
            super.paint(graphics);
        }
    }
}

exemple d'utilisation:

class Scr extends MainScreen {
    HeaderPainting mBitmapField;
    FooterText mTextField;
    public Scr() {
        int width = Display.getWidth();
        int height = Display.getHeight() / 2;
        Bitmap bitmap = customPaint(width, height);
        String text = "Lorem ipsum dolor sit amet, consectetuer "
                + "adipiscing elit, sed diam nonummy nibh euismod "
                + "tincidunt ut laoreet dolore magna aliquam erat "
                + "volutpat. Ut wisi enim ad minim veniam, quis "
                + "nostrud exerci tation ullamcorper suscipit "
                + "lobortis nisl ut aliquip ex ea commodo consequat. "
                + "Duis autem vel eum iriure dolor in hendrerit in "
                + "vulputate velit esse molestie consequat, vel "
                + "illum dolore eu feugiat nulla facilisis at vero "
                + "eros et accumsan et iusto odio dignissim qui "
                + "blandit praesent luptatum zzril delenit augue "
                + "duis dolore te feugait nulla facilisi.";
        add(mBitmapField = new HeaderPainting(bitmap, width, height));
        add(mTextField = new FooterText(text, width, height));
    }
    protected Bitmap customPaint(int width, int height) {
        Bitmap bmp = new Bitmap(width, height);
        Graphics graphics = new Graphics(bmp);
        graphics.setColor(Color.BLUE);
        graphics.fillRect(10, 10, width - 20, height - 20);
        graphics.setColor(Color.RED);
        graphics.fillRect(10, 10, 50, height - 20);
        return bmp;
    }
}

si vous n'aimez pas la concentration à l'intérieur RichTextField voir

Blackberry Java: TextField sans the caret?

4
répondu Maksym Gontar 2017-05-23 15:01:34
la source

vous pouvez désactiver la mise au point de votre RichTextField. Et gardez également à l'esprit que vous pouvez contrôler la mise au point en utilisant des champs nuls. J'ai récemment eu des batailles pour défiler avec mon champ de liste personnalisé. Vous pouvez vérifier mon post , il pourrait être utile.

0
répondu nixau 2017-05-23 15:04:26
la source