У меня есть страница Xaml с полем ввода. Клавиатура перекрывается поле ввода, когда я пытаюсь ввести значение в Вступил в Xamarin.fromsКлавиатура с перекрытием со входом Xamarin.froms
ответ
Проверьте запись находится внутри Scrollview
Я проверил его внутри прокрутки, пока оно не сработало –
Существует ноу ошибка в Android (с Xamarin) ...
Создайте новый класс в Android проекта, как это (с этим названием)
public class AndroidBug5497WorkaroundForXamarinAndroid
{
private readonly View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
public static void assistActivity(Activity activity, IWindowManager windowManager)
{
new AndroidBug5497WorkaroundForXamarinAndroid(activity, windowManager);
}
private AndroidBug5497WorkaroundForXamarinAndroid(Activity activity, IWindowManager windowManager)
{
var softButtonsHeight = getSoftbuttonsbarHeight(windowManager);
var content = (FrameLayout)activity.FindViewById(Android.Resource.Id.Content);
mChildOfContent = content.GetChildAt(0);
var vto = mChildOfContent.ViewTreeObserver;
vto.GlobalLayout += (sender, e) => possiblyResizeChildOfContent(softButtonsHeight);
frameLayoutParams = (FrameLayout.LayoutParams)mChildOfContent.LayoutParameters;
}
private void possiblyResizeChildOfContent(int softButtonsHeight)
{
var usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious)
{
var usableHeightSansKeyboard = mChildOfContent.RootView.Height - softButtonsHeight;
var heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4))
{
// keyboard probably just became visible
frameLayoutParams.Height = usableHeightSansKeyboard - heightDifference + (softButtonsHeight/2);
}
else
{
// keyboard probably just became hidden
frameLayoutParams.Height = usableHeightSansKeyboard;
}
mChildOfContent.RequestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight()
{
var r = new Rect();
mChildOfContent.GetWindowVisibleDisplayFrame(r);
return (r.Bottom - r.Top);
}
private int getSoftbuttonsbarHeight(IWindowManager windowManager)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var metrics = new DisplayMetrics();
windowManager.DefaultDisplay.GetMetrics(metrics);
int usableHeight = metrics.HeightPixels;
windowManager.DefaultDisplay.GetRealMetrics(metrics);
int realHeight = metrics.HeightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
}
, а затем в MainActivity (OnCreate) написать это ...
// Fix the keyboard so it doesn't overlap the grid icons above keyboard etc, and makes Android 5+ work as AdjustResize in Android 4
Window.SetSoftInputMode(SoftInput.AdjustResize);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
// Bug in Android 5+, this is an adequate workaround
AndroidBug5497WorkaroundForXamarinAndroid.assistActivity(this, WindowManager);
}
Это довольно распространенная проблема.
Для IOS вы можете использовать этот плагин (добавить в проект IOS): https://github.com/paulpatarinski/Xamarin.Forms.Plugins/tree/master/KeyboardOverlap
В вашем вызове проекта IOS (в AppDelegate.cs):
Xamarin.Forms.Init();//platform specific init
KeyboardOverlapRenderer.Init();
Вы должны это сделать ПОСЛЕ того, как вы вызываете Xamarin.Forms.Init().
для Android: Вы можете добавить настройку SoftInput на вашем MainActivity.cs
[Activity(WindowSoftInputMode = SoftInput.AdjustPan, Label = "@string/app_name", Icon = "@drawable/icon", Theme = "@style/SplashActivity", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait) ]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
...
Это всегда работало для меня на Android, но с момента последней версии XF (2.3.3) это больше не работает. Кажется, что все изменение размера страницы при активации клавиатуры изменилось. Доступны ли какие-либо новые решения? – Theos
пожалуйста, напишите более подробную информацию. Изображение и файл xaml вызывают проблемы. Невозможно в противном случае помочь – InitLipton
есть плагин для этого для iOS https://github.com/paulpatarinski/Xamarin.Forms.Plugins/tree/master/KeyboardOverlap – Depechie
вы можете разместить код xaml с помощью экрана для лучшего понимания. –