2012-06-08 6 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는 같은 방식으로 해당 개념을 사용합니다. 당신이 당신의 둥근 직사각형 국경 싶은 경우에 당신이 그것을 그리기 때

, 다음, 당신은 패딩의 양에 의해 들어오는하여 시작하지 마십시오. Padding은 내부에 국경이됩니다. 따라서 (x, y) == (0,0)에 직사각형을 그려야합니다. 국경 밖의 공간을 제공하려면 다른 필드 사이의 버퍼로 사용하려면 여백을 사용하십시오. Field 개체는 처럼 보이는 setMargin() 호출을가집니다.

둘째, setCursorPosition() 메서드는 커서의 공간 배치를 실제로 조정하는 데 사용되지 않습니다. It's for setting which character in the EditField the cursor should be next to. 이 문제에 대해 원하는 것이 아닙니다.

위의 코드는 직사각형을 대칭으로 그리지 않습니다. 양면에 패딩이있을 때 나머지 높이를 얻으려면 상단 하단 패드를 빼거나 나머지 폭을 얻으려면 왼쪽 을 빼야합니다.

어쨌든 CustomEditField을 실제로 어떻게 채우고 싶은지에 따라 약간 변경해야 할 수 있습니다. 그러나 다음은 커서가 수직으로 가운데에있는 편집 필드를 제공합니다. (기본 생성자를 사용하는 경우)이이 둥근 사각형하기 전에, 텍스트 위의 공간을 20 개 픽셀을 줄 것이다

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

참고. 그것은 많이 보입니다. 어쩌면 그것은 당신이 원하는 것이 아닐 수도 있습니다. 네면의 모든 패딩을 10 픽셀까지 가져온 다음 필드에 setMargin()을 사용하여 경계 외부에 약간의 공간을 제공 할 수 있습니다. 당신은 그걸 가지고 놀아야 할 것입니다.

덧붙여서,이 문제를 공격하는 또 다른 방법은 Manager 안에있는 EditField를 마치 VerticalFieldManager처럼 감싸는 것입니다. 그렇게하면 StyleFlash = EditField를 VerticalFieldManager에 맞게 스타일 플래그 = Field.FIELD_VCENTER과 함께 사용하면 목표도 달성 할 수 있습니다. 그러나이 경우, 필자는 그것이 필요하다고 생각하지 않는다.

관련 문제