2012-01-03 41 views
5
vfm = new VerticalFieldManager(Manager.VERTICAL_SCROLL); 
    vfm.add(new LabelField("horizontally centered...",Field.FIELD_HCENTER | LabelField.FOCUSABLE)); 
    vfm.add(new LabelField("horizontally centered...",Field.FIELD_HCENTER | LabelField.USE_ALL_WIDTH | LabelField.FOCUSABLE)); 

    add(vfm); 

Tại sao tôi không thể căn chỉnh các trường của mình theo chiều ngang. Tôi đã cố gắng kết hợp khác nhau nhưng không thể có được một labelfield duy nhất để được trung tâm. Nếu tôi thêm trường thứ hai bên dưới với USE_ALL_WIDTH thì trường đầu tiên sẽ được căn giữa.Trường định tâm theo chiều ngang trong trình quản lý trường theo chiều dọc

Tôi không biết cách làm đúng cách là gì!

EDIT:

Sau khi liên kết được cung cấp dưới đây, tôi đã cố gắng thực hiện:

vfm = new VerticalFieldManager(Field.USE_ALL_WIDTH | Field.USE_ALL_HEIGHT){ 


     protected void sublayout(int width, int height) { 

      super.sublayout(width, height); 

      width = getWidth(); 
      height = getHeight(); 

      for (int i = 0;i < this.getFieldCount() - 1; i++) 
      { 
       System.out.println("field:" + i); 
       Field field = this.getField(i); 
       //this positions the item in the middle of the manager 
       int x = (int)((width - field.getWidth()) * 0.50); 
       setPositionChild(field, x, field.getTop()); 
      } 
     } 


    }; 


    vfm.add(new LabelField("Facebook")); 


    add(vfm); 

Vấn đề là tôi không nhận được bất kỳ lĩnh vực. Làm thế nào tôi phải thực hiện nó?

+0

thêm labelfield của bạn trong 'HFM' và cố gắng thêm nó vào file' VFM' .. – BBdev

Trả lời

2

Đầu tiên thêm bạn Field đến một HorizontalFieldManager (nói HFM), sau đó thêm rằng hfm đến vfm, tôi hy vọng điều này sẽ giải quyết vấn đề của bạn:

VerticalFieldManager vfm = new VerticalFieldManager(); 
HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.FIELD_HCENTER); 
hfm.add(new LabelField("My Label")); 
add(hfm); 

Xem sau liên kết để tìm An effective way of aligning fields in a VerticalFieldManager

+0

Cảm ơn, nhưng phương pháp của bạn không được làm việc cho tôi. Tôi sẽ kiểm tra phương thức của liên kết. Tôi không thể tin rằng một cái gì đó rất đơn giản là cười phức tạp – Adam

+0

Liên kết các lĩnh vực trong BB đôi khi thực sự phức tạp.BTW, Bạn đã thử thiết bị nào? Tôi đã thử nghiệm trên BB 9800 Torch, nó có vẻ hoàn hảo ở đó. –

+0

Tôi đang làm việc trên 9700. Tôi sẽ thử và tính toán trong phương pháp vẽ của mình – Adam

10

Dưới đây là các quy tắc cho căn chỉnh trên BlackBerry:

  • A HorizontalFieldManager chỉ có thể căn chỉnh các trường trong đó theo chiều dọc. Vì vậy, khi tạo các trường đó chỉ các kiểu sau (còn được gọi là các bit căn chỉnh) có bất kỳ hiệu ứng nào: FIELD_TOP, FIELD_VCENTER, FIELD_BOTTOM. ví dụ. new LabelField("My field", Field.Field_VCENTER)

HorizontalFieldManager dụ

HorizontalFieldManager example

  • Một VerticalFieldManager chỉ có thể sắp xếp các lĩnh vực bên trong nó ngang. Chỉ các kiểu sau có bất kỳ hiệu ứng nào: FIELD_LEFT, FIELD_HCENTER, FIELD_RIGHT.

VerticalFieldManager dụ

enter image description here

Gắn cả hai chiều ngang và gương theo chiều dọc

Dưới đây là một ví dụ trong đó gắn một nút ở trung tâm của màn hình cả hai chiều dọc và theo chiều ngang:

public class AlignmentScreen extends MainScreen{ 

     public AlignmentScreen(){ 

      //A MainScreen has a VerticalFieldManager to lay out its 
      //fields from top to bottom, the style bits here tell it 
      //to span the whole width of the screen and not to scroll 
      super(Manager.USE_ALL_WIDTH | Manager.NO_VERTICAL_SCROLL); 

      //Set the VerticalFieldManager to have a GREEN background 
      getMainManager().setBackground(BackgroundFactory.createSolidBackground(0xFF00FF00)); 

      //Create a new HorizontalFieldManager which is centered horizontally 
      //and spans the whole height of the containing VerticalFieldManager 
      HorizontalFieldManager hfm = new HorizontalFieldManager(Field.FIELD_HCENTER | Manager.USE_ALL_HEIGHT); 

      //Set the HorizontalFieldManager's background to RED 
      hfm.setBackground(BackgroundFactory.createSolidBackground(0xFFFF0000)); 

      //Create a button and center align it vertically 
      ButtonField button = new ButtonField("Test", Field.FIELD_VCENTER); 

      //Add the button to the HoriztonalFieldManager 
      hfm.add(button); 

      //Add the HorizontalFieldManager to the VerticalFieldManager 
      add(hfm); 
     } 
    } 

Màn hình sẽ trông như thế này:

Centering vertically and horizontally

Bạn sẽ có thể để thay đổi trên để có được lĩnh vực của bạn để sắp xếp theo cách bạn muốn.

+0

Đẹp nhất. nhưng tôi có thể căn giữa VerticalFieldManager khi bạn đã căn giữa các trường nút kiểm tra? Vấn đề của tôi là tôi có một số trường trong Trình quản lý trường dọc và tôi muốn căn giữa theo chiều dọc mà VerticalFieldManager. Giúp tôi nếu bạn có sollutoin của nó. –

+0

Vui lòng không đăng câu hỏi trong nhận xét, đăng câu hỏi mới trên StackOverflow. – donturner

+0

@Adam Nếu câu trả lời này đã giúp bạn, hãy xem xét chấp nhận nó – donturner

2

Kiểm tra đoạn mã này. Không cần phải là được hợp nhất.

public final class CenterScreen extends MainScreen { 
    public CenterScreen() {   
     LabelField lbl1 = new LabelField("First and Foremost", Field.FIELD_HCENTER); 
     lbl1.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10), 
      Color.BLUE, Border.STYLE_SOLID)); 

     LabelField lbl2 = new LabelField("Second", Field.FIELD_HCENTER); 
     lbl2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10), 
      Color.RED, Border.STYLE_SOLID)); 

     LabelField lbl3 = new LabelField("Last but not least", Field.FIELD_HCENTER); 
     lbl3.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10), 
      Color.GREEN, Border.STYLE_SOLID)); 

     VerticalFieldManager vfm = new VerticalFieldManager(Field.USE_ALL_WIDTH);   
     vfm.add(lbl1); 
     vfm.add(lbl2); 
     vfm.add(lbl3); 
     add(vfm);  
    } 
} 


Hệ quả là enter image description here

Các vấn đề liên quan