mirror of
https://gitee.com/csharpui/CPF.git
synced 2026-04-18 11:38:02 +08:00
初始化
This commit is contained in:
70
CPF.Android/SoftKeyboardListner.cs
Normal file
70
CPF.Android/SoftKeyboardListner.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Util;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
using CPF.Platform;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace CPF.Android
|
||||
{
|
||||
class SoftKeyboardListner : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener
|
||||
{
|
||||
|
||||
private const int DefaultKeyboardHeightDP = 100;
|
||||
private static readonly int EstimatedKeyboardDP = DefaultKeyboardHeightDP + (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop ? 48 : 0);
|
||||
|
||||
private readonly ISurfaceView _host;
|
||||
public bool _wasKeyboard;
|
||||
|
||||
public SoftKeyboardListner(View view)
|
||||
{
|
||||
_host = view as ISurfaceView;
|
||||
}
|
||||
|
||||
public IViewImpl viewImpl = null;
|
||||
int top = 0;
|
||||
public void OnGlobalLayout()
|
||||
{
|
||||
int estimatedKeyboardHeight = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip,
|
||||
EstimatedKeyboardDP, _host.Resources.DisplayMetrics);
|
||||
|
||||
var rect = new global::Android.Graphics.Rect();
|
||||
_host.GetWindowVisibleDisplayFrame(rect);
|
||||
|
||||
int heightDiff = (int)_host.Screen.Bounds.Height - (rect.Bottom);
|
||||
var isKeyboard = heightDiff >= estimatedKeyboardHeight;
|
||||
|
||||
if (isKeyboard != _wasKeyboard)
|
||||
{
|
||||
if (GeneralView.editor != null && isKeyboard)
|
||||
{
|
||||
var ele = GeneralView.editor as UIElement;
|
||||
var p = ele.PointToScreen(new Drawing.Point(ele.ActualSize.Width, ele.ActualSize.Height));
|
||||
var offset = p.Y - (_host.Screen.Bounds.Height - heightDiff);
|
||||
if (offset > 0)
|
||||
{
|
||||
viewImpl = ele.Root.ViewImpl;
|
||||
top = viewImpl.Position.Y;
|
||||
viewImpl.Position = new PixelPoint(viewImpl.Position.X, top - (int)offset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//_host.Top = top;
|
||||
if (viewImpl != null)
|
||||
{
|
||||
viewImpl.Position = new PixelPoint(viewImpl.Position.X, top);
|
||||
viewImpl = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
_wasKeyboard = isKeyboard;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user