browserFIeld никогда не выпускает свой фокус в blackberry os5? - PullRequest
3 голосов
/ 16 декабря 2011

Это может быть старый вопрос, но я не могу найти правильное решение, если оно неправильное, пожалуйста, проигнорируйте, в противном случае, пожалуйста, помогите мне

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

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

сначала я успешно добавляю My Browserfield в First verticlemanger, а также добавляю кнопку во второй verticlemanager

наконец, два verticlemanager добавляются на главный экран.

в OS6 у меня нет никаких проблем, все работает нормально

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

, как только поле Browser получает фокус, оно никогда не выпускает егофокус, поэтому я не могу ориентироваться в нижней части Browserfield.Означает, что я не могу нажать на рекламу BlackBerry Banner.I не могу перейти из поля браузера с помощью трекпада

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

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

    }
}

любая помощь может быть оценена по достоинству

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

После того, как я много погуглил, я пришел к выводу, что это проблема ОС 5. это не разрешит это в OS5. Это решено в OS6. Вы должны предоставить способ переместить фокус с BrowserField самостоятельно. Я пробовал различные механизмы для этого, например, обнаружение 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 голосов
/ 16 декабря 2011

Это ошибка в OS5. Его исправили в ОС6 и выше. Вот причины, почему вы видите странное поведение. Вы не можете получить такое же поведение в 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);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...