Проблема с черным экраном, когда клавиатура скрывается в приложении Xamarin для Android 16Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема с черным экраном, когда клавиатура скрывается в приложении Xamarin для Android 16

Сообщение Anonymous »

У меня есть приложение xamarin, и всякий раз, когда у него есть запись внизу, где появляется клавиатура, оно меняет размер и выходит над клавиатурой, чтобы я мог видеть, что я печатаю, но сразу после завершения ввода, когда я нажимаю «Готово» или нажимаю за пределами записи, клавиатура пытается опуститься вниз, и экран пытается изменить размер, но он застревает посередине на половине пути, и в нижней части экрана появляется черный экран, оставляя мой экран черным на половине расстояния от клавиатуры.
Среда
Версия Android: Android 16 (API 35)
Версия Xamarin.Forms: 5.0.0.2578
Что я пробовал (все не удалось):
  • Пробовал AdjustResize, AdjustPan, AdjustNothing, StateAlwaysHidden
  • Попытка принудительного обновления макета с помощью RequestLayout(), ForceLayout(), Invalidate()
  • Отслеживается с помощью ViewTreeObserver.GlobalLayout().
Но я не могу реализовать оригинальный плавный переход на Android 14. Я все еще вижу черный экран на секунду.
Просмотр перед клавиатурой
Просмотр с помощью клавиатуры
Просмотр после скрытия клавиатуры
MainActivity.cs
private void RegisterKeyboardListener()
{
_rootView = Window.DecorView.RootView;

_globalLayoutHandler = (sender, args) =>
{
var rect = new Android.Graphics.Rect();
_rootView.GetWindowVisibleDisplayFrame(rect);

int screenHeight = _rootView.Height;
int keypadHeight = screenHeight - rect.Bottom;

bool isKeyboardVisible = keypadHeight > screenHeight * 0.15;

_rootView.Post(() =>
{

_rootView.PostDelayed(() =>
{
_rootView.RequestLayout();
_rootView.Invalidate();
}, 16);
});

_keyboardWasVisible = isKeyboardVisible;
};

_rootView.ViewTreeObserver.GlobalLayout += _globalLayoutHandler;
}

Пользовательский рендерер:
if (!e.HasFocus)
{
var rootView = MainActivity.Instance.Window.DecorView.RootView;
rootView.ViewTreeObserver.GlobalLayout += (sender, args) =>
{
var heightDiff = rootView.RootView.Height - rootView.Height;
if (heightDiff < 200) // Keyboard is hidden
{
rootView.RequestLayout();
}
};
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... android-16
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»