2014-03-27 13 views
1

저는 Blackberry 응용 프로그램을 개발하는 Android 개발자입니다.Blackberry의 버튼 필드에서 화면 중앙에 텍스트를 설정 하시겠습니까?

화면의 전체 너비 버튼을 만들었습니다. 텍스트를 단추 영역의 가운데로 이동하는 데 문제가 발생합니다. 코드 아래 사용

:

ButtonField _contactButton = new ButtonField(Constants.contactButtonTitle,Field.FIELD_HCENTER|Field.USE_ALL_WIDTH | 
       Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){ 
      protected void layout(int width, int height) { 
       super.layout(width, height); 
       HARD_CODED_HEIGHT = this.getHeight()/2 + 6; 
       this.setExtent(contactButtonWidth, HARD_CODED_HEIGHT); 
      } 
      public int getPreferredWidth() { 
       return contactButtonWidth; 
      } 
     }; 

enter image description here

이제 아래의 코드를 사용하여 :

ButtonField _contactButton = new ButtonField(Constants.contactButtonTitle,Field.FIELD_VCENTER|Field.USE_ALL_WIDTH | 
       Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){ 
      protected void layout(int width, int height) { 
       super.layout(getPreferredWidth(), height); 
      } 

      public int getPreferredWidth() { 
       return (Display.getWidth()-60); 
      } 
     }; 

여전히 점점 문제가 .. 내 버튼의 텍스트가 오른쪽에 정렬합니다. 제발 제안하십시오

+0

문제가 this.setExtent (contactButtonWidth, HARD_CODED_HEIGHT);와 같습니다. 이 줄을 바꿔서 올바른 위치를 얻으실 수 있습니다. – Signare

+0

setExtent를 사용하여 단추의 높이와 너비를 설정했습니다. 전체 화면 너비의 단추가 필요합니다. –

+0

레이아웃하려는 치수 (예 : super.layout (contactButtonWidth, HARD_CODED_HEIGHT))를 전달합니다.일반적으로, layout()을 호출 한 후에 setExtent()를 발행하는 것은 나쁜 습관이며 원하는 결과를 얻지 못할 수도 있습니다 (몇 가지 경우가있을 수 있음). 따라서 원하는 크기로 전달하면 (그리고 USE_ALL_HEIGHT도 사용해야합니다.) 작동하지 않으면 paint()를 재정의 (override)해야합니다. –

답변

1

ButtonField 조금 '깨진'로 나타납니다. 그러나 테스트 한 모든 OS 레벨 (OS 5.0에서 OS 7.1까지)에서 일관되게 깨진 것 같습니다. 따라서 깨진 비트를 처리하고 모든 레벨에서 해결 방법이 작동 할 것이라고 확신하면서 원하는 것을 얻을 수 있다고 생각합니다. 네가 원해.

ButtonField는 USE_ALL_WIDTH를 무시하지만 preferredWidth를 존중합니다. 따라서 ButtonField의 너비를 설정하려면 getPreferredWidth()를 재정의하십시오. 레이아웃에서 너비와 관련된 어떤 것도해서는 안됩니다.

이제 ButtonField 스타일을 사용하고 있습니다. 우리가 USE_ALL_WIDTH를 유용한 스타일로 버린 것을 감안할 때 FIELD_HCENTER도 사용하는 것에 주목합니다. Manager가 사용 가능한 폭의 중심에 Field를 위치 시키도록 Manager에게 지시하면서이 필드를 배치하는 Manager에 대한 지시자임을 실제로 알고 있어야합니다. 이 스타일은 ButtonField의 내용을 그리는 방법과 관련이 없습니다.

이 경우 DrawStyle을 사용할 수 있습니다. 기본적으로 ButtonField는 DrawStyle.RIGHT를 사용합니다. DrawStyle.Left를 존중합니다. 텍스트가 왼쪽에 그려집니다. 그러나 DrawStyle.HCENTER를 존중하지는 않습니다. 가운데 맞춤 텍스트를 얻으려면 텍스트를 직접 그려야합니다.

하나 더 합병증이 있습니다. ButtonField는 전체 Field 캔버스가 아닌 Context 영역을 paint() 메서드로 전달합니다. 테두리로 그려지기 때문에 가장자리를 통과하지 못하는 것 같습니다. 따라서 텍스트를 적절하게 가운데 맞추기 위해서는 전달 된 클리핑 영역을 사용해야합니다.

여기 ButtonField가 잘 작동합니다. 나는 이것을 위해 수업을 만드는 데 약간의 시간을 할애해야 할 것입니다. 유감스럽게 생각합니다. 나는 게을 렀고, 인라인으로 끝내 었습니다. 만들 경우 CenteredTextButtonField 클래스를 게시하십시오.

final String buttonText = "Test"; 
ButtonField _contactButton = new ButtonField(" ", 
     Field.ACTION_INVOKE | Field.FOCUSABLE | ButtonField.CONSUME_CLICK){ 
    public int getPreferredWidth() { 
     return contactButtonWidth; 
    } 
    protected void paint(Graphics graphics) { 
     super.paint(graphics); 
     XYRect clippingRect = graphics.getClippingRect(); 
     int centreY = (clippingRect.height - graphics.getFont().getHeight())/2; 
     graphics.drawText(buttonText, 0, centreY, DrawStyle.HCENTER, clippingRect.width); 
    } 
}; 
+0

아래에 작성된 코드는 나를 위해 일했습니다 ... 감사합니다. Peter Strange –

0

USE_ALL_WIDTH는 현장 학습 지침입니다. 놀랍게도 ButtonField는 이러한 지시를 무시합니다. 더 놀랍게도, 그것은 자신의 getPreferredWidth (비명 소리)를 존중합니다. 은 그래서 USE_ALL_WIDTH 드롭이처럼 ButtonField을 정의

ButtonField testBtn = new ButtonField("Button") { 
    public int getPreferredWidth() { 
     return Display.getWidth(); 
    } 
}; 
+0

여전히 문제가 있습니다 .... 내 텍스트를 내 단추의 오른쪽 모서리에 맞 춥니 다. –