2011-12-16 2 views
3

Это может быть старый вопрос, но я не получаю правильное решение если это не так, пожалуйста, игнорируйте в противном случае пожалуйста halp меняbrowserFIeld никогда не выпускает фокус в blackberry os5?

У меня есть один главный экран с двумя verticleManagers

1) Для browserField 2) одной кнопкой

первым я добавить успешно Мой Browserfield Первого verticlemanger, а также кнопка добавить второй verticlemanager

наконец два verticlemanager добавил к основному экрану.

в OS6 я не получаю любую проблему он работает отлично

но в OS5 я получил проблему, которая

когда Browserfield получает фокус, он никогда не выпустит свой фокус, так что я не имею возможности навигации недостатком браузера. Значит я не в состоянии нажать на ежевика рекламы Banner.i я не в состоянии перемещаться вниз от browserfield с помощью сенсорной панели

это мой пример кода

class browserScreen extends MainScreen 
{ 
    String url; 
    BrowserField browserField; 
    public browserScreen() { 
     VerticalFieldManager main_mgr=new VerticalFieldManager(){ 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(Display.getWidth(),Display.getHeight()); 
       setExtent(Display.getWidth(),Display.getHeight()); 
      } 
     }; 

     VerticalFieldManager browserfield_mgr=new VerticalFieldManager(){ 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(Display.getWidth(),Display.getHeight()-50); 
       setExtent(Display.getWidth(),Display.getHeight()-50); 
      } 
     }; 
     url="http://www.google.com"; 
     BrowserFieldConfig browserFieldConfig = new BrowserFieldConfig(); 
     browserFieldConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE, BrowserFieldConfig.NAVIGATION_MODE_POINTER); 
     browserFieldConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED,Boolean.TRUE); 
     browserFieldConfig.setProperty(BrowserFieldConfig.ALLOW_CS_XHR,Boolean.TRUE); 
     browserField=new BrowserField(browserFieldConfig); 
     browserField.requestContent(url); 
     browserfield_mgr.add(browserField); 
     main_mgr.add(browserfield_mgr); 
     VerticalFieldManager button_mgr=new VerticalFieldManager(){ 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(Display.getWidth(),50); 
       setExtent(Display.getWidth(),50); 
      } 
     }; 
     button_mgr.add(new SeparatorField()); 
     ButtonField btn=new ButtonField("BUTTON MANAGER"); 
     button_mgr.add(btn); 
     main_mgr.add(button_mgr); 
     add(main_mgr); 

    } 
} 

любая помощь может быть оценена

ответ

1

После того, как я много разобрался, я пришел к выводу, что это проблема с OS 5. он не разрешит его в OS5. Он разрешен в OS6. Вы должны обеспечить способ перемещения фокуса с браузера. Я пробовал различные механизмы для этого, такие как обнаружение Escape в методе keyChar на экране, лучшее, что я нашел до сих пор, - это использовать меню и дать пользователям возможность свопинга фокуса из BrowserField. В общем, я не рекомендую делиться экраном между веб-полем и любым другим.

public class LoadingScreen extends MainScreen 
{ 
    VerticalFieldManager vertical; 
    HorizontalFieldManager hor; 
    String url; 
    BrowserField browserField; 
    Banner bannerAd ; 
    private static boolean flag=false; 
    public LoadingScreen() 
    { 
//  

    VerticalFieldManager Veret=new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL|Manager.NO_HORIZONTAL_SCROLL){ 
     protected void sublayout(int maxWidth, int maxHeight) { 

      super.sublayout(Display.getWidth(),Display.getHeight()); 
      setExtent(Display.getWidth(),Display.getHeight()); 
     } 
    }; 
    //Veret.setBackground(BackgroundFactory.createSolidBackground(Color.BLACK)); 
     VerticalFieldManager main_mgr=new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL|Manager.NO_HORIZONTAL_SCROLL){ 
      protected void sublayout(int maxWidth, int maxHeight) { 

       super.sublayout(Display.getWidth(),Display.getHeight()-50); 
       setExtent(Display.getWidth(),Display.getHeight()-50); 
      } 
     }; 

     url="http://www.google.com"; 
     BrowserFieldConfig browserFieldConfig = new BrowserFieldConfig(); 
     browserFieldConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE, BrowserFieldConfig.NAVIGATION_MODE_POINTER); 
     browserFieldConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED,Boolean.TRUE); 
     browserFieldConfig.setProperty(BrowserFieldConfig.ALLOW_CS_XHR,Boolean.TRUE); 
     browserField=new BrowserField(browserFieldConfig); 
     browserField.requestContent(url); 

     main_mgr.add(browserField); 
     Veret.add(main_mgr); 

     final Bitmap ad_bg=Bitmap.getBitmapResource("add_bg.png"); 
     VerticalFieldManager add_back=new VerticalFieldManager(USE_ALL_WIDTH|Field.FOCUSABLE){ 
      protected void paint(Graphics graphics) { 
       graphics.drawBitmap(0, 0, ad_bg.getWidth(), ad_bg.getHeight(), ad_bg, 0, 0); 
       super.paint(graphics); 
      } 
      protected void sublayout(int maxWidth, int maxHeight) { 

       super.sublayout(ad_bg.getWidth(), ad_bg.getHeight()); 
       setExtent(ad_bg.getWidth(), ad_bg.getHeight()); 
      } 
     }; 
     try{ 
       Bitmap customPlaceholder = Bitmap.getBitmapResource("add_bg.png"); 
       bannerAd = new Banner(31848, null, 100000, customPlaceholder); 
       bannerAd.setBorderColor(Color.RED); 
       int i=(Display.getWidth()-320)/2; 
       bannerAd.setPadding(0, 0, 0, i); 
       bannerAd.setBannerTransitionColor(Color.RED); 
       bannerAd.setMMASize(Banner.MMA_SIZE_EXTRA_LARGE); 
       // Dialog.inform(""+bannerAd.getMMASize()); 

      }catch (Exception e) { 
       Dialog.inform(e.getMessage()); 
     } 
     add_back.add(bannerAd); 
     Veret.add(add_back); 
      add(Veret); 

    } 
    protected void makeMenu(Menu menu, int instance) 
     { 

     int i=Integer.parseInt(StartUp.getOsVersion().substring(0, 1)); 
      if(i<6) 
      menu.add(_testItem); 
     } 

    private MenuItem _testItem = new MenuItem("Go to Advertise", 100, 9) 
     { 
       public void run(){ 

        bannerAd.setFocus(); 

       } 
     }; 


} 
0

Это ошибка в OS5. Его зафиксировали в os6 и вверх. Вот почему вы видите странное поведение. Вы не можете получить такое же поведение в os5. Единственное, что вы могли бы сделать, это взломать, то есть установитьфокусировку на button_mgr. Код будет выглядеть следующим образом.

// override the invokeAction method 
    public boolean invokeAction(int action) { 
      Field f = getFieldWithFocus(); 
      // check the type of field you are looking for , 
      //here i am checking if its a verticalfieldmanager 
      if (f instanceof VerticalFieldManager) { 
        button_mgr.setFocus(); 
        return true; 
      } 
      return super.invokeAction(action); 
    } 

это установитфокусировку на вашу кнопку.

+0

жаль я уже попробовать это, но я не понимаю одну вещь, что когда метод invokeAction позвонит пожалуйста, вы можете intigrate ваше решение с моим выше код и проверить его, пожалуйста, –

+0

Что вы попробовать? что случилось потом? вы проверили http://www.blackberry.com/developers/docs/4.2api/net/rim/device/api/ui/Field.html#invokeAction(int). Он сообщает, что такое invokeaction – rfsk2010

Смежные вопросы