2016-11-23 4 views
1

У меня есть страница Xaml с полем ввода. Клавиатура перекрывается поле ввода, когда я пытаюсь ввести значение в Вступил в Xamarin.fromsКлавиатура с перекрытием со входом Xamarin.froms

+0

пожалуйста, напишите более подробную информацию. Изображение и файл xaml вызывают проблемы. Невозможно в противном случае помочь – InitLipton

+0

есть плагин для этого для iOS https://github.com/paulpatarinski/Xamarin.Forms.Plugins/tree/master/KeyboardOverlap – Depechie

+0

вы можете разместить код xaml с помощью экрана для лучшего понимания. –

ответ

3

Проверьте запись находится внутри Scrollview

+0

Я проверил его внутри прокрутки, пока оно не сработало –

1

Существует ноу ошибка в 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); 
      } 
0

Это довольно распространенная проблема.

Для 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 
    { 

... 
+0

Это всегда работало для меня на Android, но с момента последней версии XF (2.3.3) это больше не работает. Кажется, что все изменение размера страницы при активации клавиатуры изменилось. Доступны ли какие-либо новые решения? – Theos