2014-02-28 4 views
0

작은 응용 프로그램에서 작업 중이며이 부분에서 저를 곤란하게 만들었습니다. 이 페이지에는 listField (스크린 샷의 버튼 위에 표시), 일부 버튼 및 일부 정적 인 editFields이 있으며 스크롤하는 데 문제가 있습니다.목록 영역의 부분 사용자 정의

listField은 5 개의 행 (스크린 샷에 2가 표시됨)을 표시하도록 제한하고 listField에 5 개 이상의 항목이있는 경우 전체 페이지를 스크롤하지 않고 스크롤 할 수 있도록하려고합니다. , 그냥 목록보기).

또 다른 문제는 editFields입니다. 많은 수의 텍스트 때문에 너무 커지면 화면이 사라질 것입니다. super(Manager.NO_VERTICAL_SCROLL);을 호출하지 않으면 화면이 나타나지 않습니다. 이는 listField에 필요합니다. 작업.

listField의 완전한 사용자 지정 클래스를 구현하는 유일한 방법은이 문제입니까? 아니면 더 간단한 대안이 있습니까?

(스크린 샷 나는 이미지를 게시 할 수있는 충분한 담당자가 없기 때문에 imgur)에 퀸, http://imgur.com/RcfspQP

감사를

편집 :

public class TestScreen extends MainScreen{ 
public TestScreen(){ 
    //Without this call to super (which turns off vertical scrolling) the program throws an IllegalStateException and won't open the screen 
    super(Manager.NO_VERTICAL_SCROLL); 

    //Create some managers to organize the different Fields 
    VerticalFieldManager verticalAllManager = new VerticalFieldManager(); 
    VerticalFieldManager verticalInfoManager = new VerticalFieldManager(); 
    //Going to use this to limit the number of rows the list will display 
    VerticalFieldManager verticalListManager = new VerticalFieldManager() 
    { 
     protected void sublayout(int width, int height) { 
      //Just test numbers 
      super.sublayout(width, 100); 
     } 
    }; 
    HorizontalFieldManager horizontalButtonManager = new HorizontalFieldManager(); 

    //Add a title bar 
    add(new LabelField("Choose the call you want to view", LabelField.FIELD_HCENTER)); 
    add(new SeparatorField()); 

    //Creates the SimpleList ListField 
    Manager mainManager = getMainManager(); 
    final SimpleList listField = new SimpleList(mainManager); 

    //Add items to the listField 
    listField.add("Time: 12:30 | Date: 3:10:2014"); 
    listField.add("Time: 03:13 | Date: 1:25:2013"); 

    //Creates a button to use for selecting the desired call 
    final ButtonField selectCall = new ButtonField("Select Call", ButtonField.CONSUME_CLICK); 

    //Creates fields for all the required information (blank to start) 
    final BasicEditField timeField, dateField, numberField, nameField; 
    timeField = new BasicEditField("Call Time: ", ""); 
    dateField = new BasicEditField("Call Date: ", ""); 
    numberField = new BasicEditField("Call Number: ", ""); 
    nameField = new BasicEditField("Caller Name: ", ""); 

    //Creates a button that can be used to save changes 
    final ButtonField saveChanges = new ButtonField("Save Changes", ButtonField.CONSUME_CLICK); 
    final ButtonField deleteRow = new ButtonField("Delete Call", ButtonField.CONSUME_CLICK); 

    //Adds all the info fields into a vertical manager to organize them 
    verticalInfoManager.add(timeField); 
    verticalInfoManager.add(dateField); 
    verticalInfoManager.add(numberField); 
    verticalInfoManager.add(nameField); 

    //Adds the 3 buttons to a horizontal manager to lay them out in a row 
    horizontalButtonManager.add(selectCall); 
    horizontalButtonManager.add(saveChanges); 
    horizontalButtonManager.add(deleteRow); 

    //Add the horizontal button manager to the vertical page manager 
    verticalAllManager.add(horizontalButtonManager); 

    //Add the vertical info manager to the vertical page manager 
    verticalAllManager.add(verticalInfoManager); 

    //Add all the managers, under the page manager, to the page 
    add(verticalAllManager); 

} 

} 여기

내가 추가 한 샘플 페이지와 함께 다른 스크린 샷과 어떻게 일치합니까? ooks가 실행될 때 http://imgur.com/xtPNr7p

가장 큰 문제는 지금은 NO_VERTICAL_SCROLL을 사용하여 super()를 호출하면 전체 페이지의 스크롤이 꺼지는 것입니다. 이 호출이 없으면 정보 필드가 스크롤되며 간단히 말해서 (나는 그렇게 생각합니다) 멀리 스크롤하는 것을 막기 위해 verticalListManager 및 horizontalButtonManager를 배너에 추가해야합니다. 새로운 UI 컨트롤의 일부가 보이지 않는하지만

답변

0

내 침대 시간 지나서 잘 때문에 죄송합니다, 단지 부분적인 대답 ....

의 ListField는 NO_VERTICAL_SCROLL을 필요로하지 않습니다. 나는 이것을 피한다 ...

ListField를 5 '행'만 표시하도록 제한하는 방법은 스크롤하는 VerticalFieldManager에 넣고 5 행을 표시하는 데 필요한 크기로 VFM의 크기를 제한하는 것입니다.

크기를 제한하려면 VFM의 하위 레이아웃을 덮어 써야합니다. 최근에이 작업을 수행하지는 않았지만 전달 된 너비와 높이가 제한된 super.sublayout을 호출하는 것만 큼 간단하다고 생각합니다.

이 무엇을하고 있는지 이해하려면이 두 가지 기술 자료 문서를 검토하십시오 문제가 해결되지 않으면

Custom layout manager

Extend Manager

, 즉 우리가 할 수있는 다음 '수정'을 샘플 코드에 붙여 넣기하세요 이 작업을 보여줍니다. 기본적으로 ListField와 버튼 및 EditFields를 사용하여 식별 된 문제를 보여주고 다른 스크린 샷과 함께 붙여 넣는 간단하고 독립 실행 형 MainScreen을 만들고 여기에있는 누군가가 수정 된 버전의 코드를 만들 것이라고 확신합니다.

당신이 발견 한 것처럼, 때문에

아, 내가에서는 SimpleList, 내 마음에, 이들 중 일부는 제대로 코딩되지 않은 당신이 새로운 UI 클래스 중 하나 사용하고 참조 업데이트, 그들은 NO_VERTICAL_SCROLL이 필요합니다. 나는 당신이 실제로 높이를 고정시킨 non-scrolling VFM에 그것들을 추가했다면, 당신이 원하는 방식대로 처리 할 수 ​​있을지 의심 스럽다. 하지만 나에게는 선택의 여지가 없다. 일반적인 ListField를 코딩하겠다. 새로운 UI 컨트롤에도 다른 제한이있는 것처럼 보이고, 나에게있어 제공하는 단순화는 내가 좋아하는 기능을 숨 깁니다.

어쨌든, 나는 세 가지 옵션이 있다고 생각합니다 : 1) 편집 영역을 상태 영역 (setStatus (...))에 추가하면 화면 하단에 고정됩니다. 제목 영역에 제목 레이블을 추가하십시오 (setTitle (..)). 그러면 중간에 전화가 스크롤됩니다. 2) SimpleList를 스크롤하지 않고 높이를 제한하는 VFM에 넣으십시오. 3) SimpleList를 일반 ListField로 변경하십시오.

당신이 선택한 Ui가 비 터치 스크린 전화에서 문제가되는 것 같습니다. 트랙 패드의 사용자 만 전화를 선택할 수 있습니까? 메뉴를 사용하여 선택한 행에 '버튼'을 제공하는 방법을 살펴 보겠습니다. 행을 편집하려면 세부 사항과 함께 팝업 화면을 사용하십시오.

위의 옵션 중 하나를 선택하면 도움이되지만, 먼저이 디자인을 테스트하여 작동하는지주의해야합니다.

+0

모두 수정되었습니다! 당신이 # 1에서 말한 것을 사용하고 목록을 일반 ListField로 바꿨습니다. 모든 것이 잘 작동합니다. 비 터치 스크린에서 작동하지 않는 UI에 관해서는, 회사에서 내부 용도로 사용하고 있으며 클라이언트는 모두 터치 스크린 전화를 사용하므로 비 터치 스크린은 문제가되지 않습니다. 나중 버전에서 더 많은 기능을 추가 할 예정이지만, 이것이 현재 필요한 모든 것입니다. 다시 한 번 도움을 주셔서 감사합니다. – Br0k3nL1m1ts