2014-07-02 3 views
0

коллеги! Я создал приложение, в котором я использовал WebView для навигации на страницах сайта.Настройка WebView при открытии клавиатуры в Android

browser = (WebView) findViewById(R.id.customWebBrowser); 

    browser.setWebViewClient(new CustomWebViewClient()); 
    browser.setWebChromeClient(new CustomWebChromeClient()); 
    browser.setOnTouchListener(new OnTouchBrowser()); 

Проблема в ситуации, когда я нажимаю ссылку «login» и открывается всплывающее окно для ввода логина/пароля. Когда клавиатура встала, всплывающее окно ввода/пароля клавиатуры закрывается, и я не могу увидеть, какие символы я ввел, содержимое видимого веб-представления не настроено.

Я попытался исправить эту проблему, используя параметр windowSoftInputMode в AndroidManifest.xml, но он не имеет никакого эффекта. Я думаю, что из-за использования всплывающего окна на стороне сервера.

Есть ли кто-нибудь, кто знает, как исправить эту проблему и экран, будет отрегулирован, когда клавиатура встанет?

Благодарим за помощь.

ответ

0

я нашел решение моей проблемы. Это основано на обходном пути yghm.

http://code.google.com/p/android/issues/detail?id=5497

public class AndroidBug5497Workaround { 

    // For more information, see https://code.google.com/p/android/issues/detail?id=5497 
    // To use this class, simply invoke assistActivity() on an Activity that already has its content view set. 

    public static void assistActivity (Activity activity) { 
     new AndroidBug5497Workaround(activity); 
    } 

    private View mChildOfContent; 
    private int usableHeightPrevious; 
    private FrameLayout.LayoutParams frameLayoutParams; 

    private AndroidBug5497Workaround(Activity activity) { 
     FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); 
     mChildOfContent = content.getChildAt(0); 
     mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      public void onGlobalLayout() { 
       possiblyResizeChildOfContent(); 
      } 
     }); 
     frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams(); 
    } 

    private void possiblyResizeChildOfContent() { 
     int usableHeightNow = computeUsableHeight(); 
     if (usableHeightNow != usableHeightPrevious) { 
      int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); 
      int heightDifference = usableHeightSansKeyboard - usableHeightNow; 
      if (heightDifference > (usableHeightSansKeyboard/4)) { 
       // keyboard probably just became visible 
       frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; 
      } else { 
       // keyboard probably just became hidden 
       frameLayoutParams.height = usableHeightSansKeyboard; 
      } 
      mChildOfContent.requestLayout(); 
      usableHeightPrevious = usableHeightNow; 
     } 
    } 

    private int computeUsableHeight() { 
     Rect r = new Rect(); 
     mChildOfContent.getWindowVisibleDisplayFrame(r); 
     return (r.bottom - r.top); 
    } 

} 

Используя этот класс в OnCreate-метод деятельности:

AndroidBug5497Workaround.assistActivity(this); 
0

перехватывать события из IME и вручную регулировать высоту WebView

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