0

В моем классе активности я использую как обычную клавиатуру, так и клавиатуру софт-клавиатуры android. Текстовая мягкая клавиатура Android изменяет размеры макета. Если я открываю пользовательскую клавиатуру, когда открыта мягкая клавиатура, последняя скрывается, а макет расширяется. Но я открываю пользовательскую клавиатуру сразу после звонкаПосле того, как клавиатура Android сгладила пользовательскую клавиатуру, отображаемую дважды

InputMethodManager imm = (InputMethodManager)context.GetSystemService(Context.InputMethodService); 
      imm.HideSoftInputFromWindow(view.WindowToken, 0); 

Здесь вид с пользовательской клавиатурой. И я сталкиваюсь с проблемой, когда пользовательские клавиатуры рисуют дважды:

  1. Когда андроид мягкой клавиатура скрыта, но раскладка не расширена назад еще. В этом случае пользовательская клавиатура появляется в верхней половине экрана.
  2. После того, как макет развернут назад. В этом случае пользовательская клавиатура появляется в нижней половине экрана.

Что я хочу сделать, так это избежать одновременного появления двух клавиатур. В коде активности я использую только SoftInput.StateAlwaysHidden WindowSoftInputMode. SoftInput.AdjustPan не удобен, потому что в этом случае некоторые виды могут быть скрыты клавиатурой Android.

ответ

1

После нескольких часов поиска в Интернете ответ был найден. Pspdfkit имеет great post.

И с небольшим расследованием было переписаны на C# в методе OnCreate:

private View decorView; 
    private int lastVisibleDecorViewHeight = 0; 
    decorView = Window.DecorView; 
    decorView.ViewTreeObserver.GlobalLayout += (sender, args) => 
     { 
      Rect windowVisibleDisplayFrame = new Rect(); 
      decorView.GetWindowVisibleDisplayFrame(windowVisibleDisplayFrame); 
      int visibleDecorViewHeight = windowVisibleDisplayFrame.Height(); 
      if (lastVisibleDecorViewHeight != 0) 
      { 
       if (lastVisibleDecorViewHeight > visibleDecorViewHeight) 
       { 
        OnSoftKeyboardShown(); 
       } 
       else if (lastVisibleDecorViewHeight < visibleDecorViewHeight) 
       { 
        OnSoftKeyboardHidden(); 
        if (!isAndroidSoftKeyboardShown && customKeyboardRequested) 
        { 
         Keyboard.RequestCustomKeyboard(requestedCustomKeyboardType); 
         customKeyboardRequested = false; 
        } 
       } 
      } 
      lastVisibleDecorViewHeight = visibleDecorViewHeight; 
     }; 

Надеется, что это поможет кому-то с подобными проблемами.

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