В Xamarin.Android, как убедиться, что SoftInput adjustResize корректно работает при событии up / down клавиатуры?

#android #android-layout #xamarin #xamarin.android #mvvmcross

#Android #android-макет #xamarin #xamarin.android #mvvmcross

Вопрос:

Что нам нужно выполнить:

  • Как пользователь я хочу видеть изображение с максимальным размером на экране, от нижней части экрана до нижней части заголовка
  • Когда клавиатура поднимается или опускается, изображение должно изменять размер, чтобы оно всегда было полностью видно, используя максимальное пространство.

введите описание изображения здесь

Я добился этого в мини-проекте, выполнив следующие действия:

1 — Добавьте следующий атрибут в Android.manifest.xml свойство приложения:

 android:windowSoftInputMode="adjustResize"
 

2 — Добавление этой строки кода в обработчик события MainActivity onCreate:

 Window.SetSoftInputMode(SoftInput.AdjustResize);
 

3 — использование этого свойства layout в объекте ImageView:

 android:layout_weight="1"
 

Это отлично работает в мини-проекте, но когда я переношу этот код в наш реальный проект, он не работает. Когда клавиатура запрашивает, изображение и заголовок, кажется, прокручиваются вверх.

введите описание изображения здесь

Размер изображения не изменяется, изображение отображается не полностью, а заголовок вообще не отображается.

Основное отличие в реальном проекте заключается в том, что он использует MvvmCross и не имеет класса MainActivity. Существует класс MainApplication, который объявлен как:

 public class MainApplication : MvxAndroidApplication<Setup, App>
 

Я не могу добавить Окно.Установите там softinputmode, потому что в нем говорится: «CS0120: ссылка на объект требуется для окна нестатического поля, метода или свойства.SetSoftInputMode(программный ввод)'»»

Поэтому я попытался использовать его в действии просмотра следующим образом:

 [Activity(Label = "PhotoCaptionView", WindowSoftInputMode = SoftInput.AdjustResize, ScreenOrientation = ScreenOrientation.Portrait, Theme = "@style/IM.Theme.Main", LaunchMode = LaunchMode.SingleTask)]
public class EditPostView : BaseIMActivity<EditPostViewModel> 
protected override void OnCreate(Bundle bundle)
{
    Window.SetSoftInputMode(SoftInput.AdjustResize);
    base.OnCreate(bundle);
}
 

Обратите внимание, что я устанавливаю SoftInput.Отрегулируйте размер в двух местах, в качестве декоратора, а также встроенного.

Я также добавил это свойство в манифест Android, но, похоже, ничто не заставляет adjustResize работать. Я не знаю, что еще попробовать.

Ответ №1:

Проблема заключалась в style.xml файл, в котором было установлено это свойство:

 <item name="android:windowFullscreen">true</item>