2012-06-08 71 views
0

我創建了一個帶有圓角邊框的自定義編輯區域。但光標顯示在CustomEditField的頂部。如何將光標位置更改爲字段中心。在這個問題上需要幫助。以下代碼片段是CustomEditField的實現。如何在CustomEditField的中間設置光標位置?

public CustomEditField() { 
    this(0); 
    setMaxSize(15); 
    setCursorPosition(AXIS_VERTICAL); 
} 

public CustomEditField(long style) { 
    this(new XYEdges(20, 10, 20, 10), Field.FIELD_HCENTER 
      | Field.USE_ALL_WIDTH | Field.NON_SPELLCHECKABLE 
      | TextField.NO_NEWLINE | CONSUME_INPUT | style); 
} 

public CustomEditField(String label, String initialValue) { 
    this(0); 
    setLabel(label); 
    setText(initialValue); 
} 

public CustomEditField(XYEdges points, long style) { 
    super(style); 
    setPadding(points); 
} 

/** 
* Paints EditField Background with specified Format values 
*/ 
protected void paintBackground(Graphics graphics) { 
    graphics.setColor(Color.WHITE); 
    graphics.fillRoundRect(10, getPaddingTop(), getWidth() - 10, 
      getHeight() - getPaddingBottom(), 20, 20); 
    graphics.setColor(0x686868); 
    graphics.drawRoundRect(10, getPaddingTop(), getWidth() - 10, 
      getHeight() - getPaddingBottom(), 20, 20); 
    graphics.setColor(Color.BLACK); 
} 
+1

截圖將會非常有幫助。 – mrvincenzo

回答

1

首先,有幾個概念可以確保您清楚。對於Field,有保證金,填充邊界Here is a good description of what they represent ......鏈接的問題是關於Android的,但據我所知,Android和BlackBerry以相同的方式使用這些概念。

如果你希望你的圓角矩形是你邊境,那麼當你繪製它,你不通過填充量進來啓動它。填充是裏面的邊界。所以,你應該在(x,y)==(0,0)處繪製矩形。如果您想在邊界之外提供一些空間作爲其他字段之間的緩衝區,請使用保證金Field對象有一個setMargin()調用,看起來就像setPadding()

其次,方法setCursorPosition()是不是真的在太空中圍繞光標的佈局。 It's for setting which character in the EditField the cursor should be next to。不是你想要這個問題。

此外,您上面的代碼不是對稱繪製矩形。請記住,當你有兩側填充,那麼你就必須減去頂部底墊,以獲得剩下的高度,或減去離開有權獲得剩餘的寬度。

不管怎麼說,這取決於你如何其實是想你CustomEditField填充,你可能需要改變這一點了。但是,下面至少會給你一個光標垂直居中的編輯區域。

public class CustomEditField extends BasicEditField { 
    public CustomEditField() { 
     this(0); 
     setMaxSize(15); 
     //setCursorPosition(AXIS_VERTICAL); 
    } 

    public CustomEditField (long style) { 
     this(new XYEdges(20, 10, 20, 10), Field.FIELD_HCENTER | Field.USE_ALL_WIDTH | Field.NON_SPELLCHECKABLE 
      | TextField.NO_NEWLINE | CONSUME_INPUT | style); 
    } 

    public CustomEditField (String label, String initialValue) { 
     this(0); 
     setLabel(label); 
     setText(initialValue); 
    } 

    public CustomEditField (XYEdges points, long style) { 
     super(style); 
     setPadding(points); 
    } 

    /** 
    * Paints EditField Background with specified Format values 
    */ 
    protected void paintBackground(Graphics graphics) { 
     graphics.setColor(Color.WHITE); 
     graphics.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20); 
     graphics.setColor(0x686868); 
     graphics.drawRoundRect(0, 0, getWidth(), getHeight(), 20, 20); 
     graphics.setColor(Color.BLACK); 
    } 
} 

請注意,這將使您的圓角矩形(如果您使用默認構造函數)之前的文本上方20像素的空間。這看起來很多。也許這不是你想要的。您可能決定將所有4邊的填充降至10個像素,然後在該字段上使用setMargin()以在邊界之外提供一些空間。你必須玩弄它。

順便說一句,另一種解決這個問題的方法,我用了很多,就是把你的EditField封裝在Manager之內,就像VerticalFieldManager一樣。如果你這樣做,並add()的EditField中的VerticalFieldManager,與風格標誌= Field.FIELD_VCENTER,也應該完成自己的目標。但在這種情況下,我不認爲這是必要的。