2012-01-03 13 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); 

मैं अपने फ़ील्ड क्षैतिज रूप से गठबंधन क्यों नहीं कर सकता। मैंने अलग-अलग संयोजनों की कोशिश की है लेकिन एक भी लेबलफिल्ल्ड केंद्रित नहीं हो सकता है। यदि मैं USE_ALL_WIDTH के साथ नीचे एक दूसरा फ़ील्ड जोड़ता हूं तो पहला फ़ील्ड केंद्रित हो जाता है।एक ऊर्ध्वाधर क्षेत्र प्रबंधक में क्षैतिज रूप से केंद्रित फ़ील्ड

मैं नहीं जानता कि क्या यह ऐसा करने का उचित तरीके से!

संपादित करें:

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); 

समस्या यह है कि मैं किसी भी खेतों नहीं मिल रहा है:

नीचे दिए गए लिंक के बाद, मैं क्या कर की कोशिश की। मैं इसे कैसे लागू करना चाहता हूं?

+0

में परिणामस्वरूप 'HFM' में अपने labelfield जोड़ने और इसे में अपने' VFM' .. – BBdev

उत्तर

2

पहले जोड़ने के अपने Field करने के लिए एक HorizontalFieldManager (HFM कहते हैं), तो जोड़ने hfmvfm करने के लिए, मुझे आशा है कि यह आपकी समस्या का समाधान होगा:

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

निम्नलिखित देखें ब्लैकबेरी पर An effective way of aligning fields in a VerticalFieldManager

+0

धन्यवाद जोड़ने का प्रयास करते हैं, लेकिन अपने विधि मेरे लिए काम नहीं कर रहा है। मैं लिंक की विधि देख लूंगा। मैं विश्वास नहीं कर सकता कि कुछ आसान है हंसमुख जटिल – Adam

+0

बीबी में फ़ील्ड संरेखित करना कभी-कभी वास्तव में जटिल होता है। बीटीडब्ल्यू, आपने किस डिवाइस पर कोशिश की? मैंने बीबी 9800 मशाल पर इसका परीक्षण किया है, यह वहां बिल्कुल सही लगता है। –

+0

मैं 9700 पर काम कर रहा हूं। मैं अपनी पेंट विधि – Adam

10

यहाँ संरेखण के लिए नियमों को खोजने के लिए लिंक:

  • एक HorizontalFieldManager केवल यह खड़ी भीतर क्षेत्रों संरेखित कर सकते हैं। FIELD_TOP, FIELD_VCENTER, FIELD_BOTTOM: तो जब उन क्षेत्रों केवल निम्नलिखित शैलियों (भी संरेखण बिट्स के रूप में जाना जाता है) बनाने के लिए किसी भी प्रभाव है। जैसे new LabelField("My field", Field.Field_VCENTER)

HorizontalFieldManager उदाहरण

HorizontalFieldManager example

  • एक VerticalFieldManager केवल यह क्षैतिज भीतर क्षेत्रों संरेखित कर सकते हैं। केवल निम्न शैलियों का कोई प्रभाव पड़ता है: FIELD_LEFT, FIELD_HCENTER, FIELD_RIGHT।

VerticalFieldManager उदाहरण

enter image description here

दोनों क्षैतिज और खड़ी उदाहरण

यहाँ संरेखित एक उदाहरण है जो दोनों अनुलंब और क्षैतिज स्क्रीन के केंद्र में एक बटन संरेखित करता है:

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); 
     } 
    } 

स्क्रीन इस तरह दिखना चाहिए:

Centering vertically and horizontally

आप अपने क्षेत्रों जिस तरह से आप चाहते हैं संरेखित करने के लिए प्राप्त करने के लिए ऊपर संशोधित करने के लिए सक्षम होना चाहिए।

+0

नाइस वन के भीतर कोशिश और गणना करूंगा। लेकिन क्या मैं वर्टिकलफिल्ल्ड मैनेजर को केंद्र में रख सकता हूं क्योंकि आपने टेस्ट बटन फील्ड को केंद्र दिया है? मेरा मुद्दा है कि मेरे पास वर्टिकल फील्ड मैनेजर में कुछ फ़ील्ड है और मैं वर्टिकलफिल्ल्ड मैनेजर को लंबवत रूप से केंद्रित करना चाहता हूं। अगर आप इसके बारे में sollutoin है तो मेरी मदद करो। –

+0

कृपया टिप्पणियों में प्रश्न पोस्ट न करें, StackOverflow पर एक नया प्रश्न पोस्ट करें। – donturner

+0

@Adam अगर इस उत्तर ने आपकी मदद की है तो कृपया इसे स्वीकार करने पर विचार करें – donturner

2

इस कोड स्निपेट को चेक करें। यह संकलित होना आवश्यक नहीं है।

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);  
    } 
} 


enter image description here

संबंधित मुद्दे