xamarin Forms:根据键盘高度向上移动视图

2023-11-23

我正在使用 xamarin 表单。我用xaml设计了一个登录表单页面。我想在键盘出现时向上移动登录表单视图,以便文本字段和登录按钮在两个平台上都可见Android and IOS。如何计算键盘高度并通过动态计算键盘高度将登录表单视图向上移动。

enter image description here

下面是我的 xaml 代码:

<ContentPage>
    <ScrollView>
        <AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <Grid Padding="20, 30, 20, 20" RowSpacing="20" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>

                <Image Grid.Row="0" Source="login.png" HorizontalOptions="Center" VerticalOptions="Center"/>

                <Entry Grid.Row="2" x:Name="entryUserName" HorizontalOptions="Fill"  Placeholder="Username" PlaceholderColor="#707070" Text="{Binding UserName,Mode=TwoWay}" Margin="5"/>

                <BoxView Grid.Row="2" HeightRequest="1" HorizontalOptions="Fill" BackgroundColor="#707070" VerticalOptions="End"/>

                <Entry Grid.Row="3" x:Name="entryPassword" Text="{Binding Password,Mode=TwoWay}" Placeholder="Password" PlaceholderColor="#707070" Margin="5" HorizontalOptions="Fill" IsPassword="True"/>

                <BoxView Grid.Row="3" HeightRequest="1" HorizontalOptions="Fill" BackgroundColor="#707070" VerticalOptions="End"/>

                <Button Grid.Row="5" HorizontalOptions="Center" VerticalOptions="Center" Text="Login" Command="{Binding doLoginCommand}" CommandParameter="entryUserName,entryPassword" />

            </Grid>         
        </AbsoluteLayout>
    </ScrollView>
</ContentPage>

我不想对页面执行任何类型的自定义渲染。是否有任何资源可以通过它编写依赖服务来计算不同移动视图跨平台的键盘高度。 我经历过this但它有某种我不想要的自定义渲染。


选项1:

安卓: 将其添加到您的清单中:

<activity //Your MainActivity
        android:windowSoftInputMode="stateVisible|adjustResize" ... >
        ...
</activity>

IOS: 添加这个 nuget 包:https://www.nuget.org/packages/Xam.Plugins.Forms.KeyboardOverlap/

并初始化它:

Xamarin.Forms.Init();//platform specific init
KeyboardOverlapRenderer.Init ();

选项2:

将此代码添加到您的 Page 类中:

        protected override void OnAppearing()
        {
            base.OnAppearing();
            entryUserName.Focused += InputFocused;
            entryPassword.Focused += InputFocused;
            entryUserName.Unfocused += InputUnfocused;
            entryPassword.Unfocused += InputUnfocused;
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            entryUserName.Focused -= InputFocused;
            entryPassword.Focused -= InputFocused;
            entryUserName.Unfocused -= InputUnfocused;
            entryPassword.Unfocused -= InputUnfocused;
        }
        void InputFocused(object sender, EventArgs args){
            Content.LayoutTo(new Rectangle(0,-360, Content.Bounds.Width, Content.Bounds.Height));
        }

        void InputUnfocused(object sender, EventArgs args){
            Content.LayoutTo(new Rectangle(0,0, Content.Bounds.Width, Content.Bounds.Height));
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xamarin Forms:根据键盘高度向上移动视图 的相关文章

随机推荐

  • 如何在 PyCharm 的运行/调试配置中将环境变量作为命令行参数传递?

    我正在尝试学习 PyCharm 需要将环境变量作为命令行参数传递给我的进程 例如执行相当于myScript py u myVar在 Linux 上 或者myScript py u myVar 在 Windows 上 如何在 PyCharm
  • 如果从静态构造函数启动并等待空的 .NET 任务,为什么不会完成?

    我不明白为什么下面的代码不起作用 var task new Task gt task Start if task Wait 10000 logger Info Works else logger Info Doesn t work 超时后
  • UIBarButtonItem 图标通过 IB 添加时为白色,以编程方式添加时为黑色

    当我将图标添加到UIBarButtonItem通过 Interface Builder 该图标显示为白色 当我以编程方式将相同的图标文件添加到另一个图标文件时UIToolbar 图标显示为黑色 为什么 UIImage image UIIma
  • Tesseract OCR:是否可以强制使用特定模式?

    我正在使用 Tesseract 我想开发一个能够识别字符序列的应用程序 我取得了不错的成绩 但并不出色 我想读取的字符序列有always一个特定的模式 比方说 数字数字数字字符字符 例如 123AB 有没有办法 告诉 ocr引擎结构始终是固
  • C# 理论:将 JMP 写入 asm 中的 codecave

    假设我已经使用以下命令分配了放置我的 codecave 的地址VirtualAllocEx 它返回地址 我使用以下命令将代码写入该地址WriteProcessMemory 这是问题 如何编写跳转到我的 Codecave 的跳转 我知道跳跃开
  • 按钮显示内联CSS

    我有以下 CSS 和 HTML http jsfiddle net 47w0h73r 6 one padding 20px background f00 two padding 20px background 00f a button fo
  • Jenkins 主/从配置

    我一直在阅读有关 Jenkins 主 从配置的信息 但我仍然有一些问题 是不是从机 Jenkins 并没有像主机 Jenkins 那样实际安装和启动 我假设我会以相同的方式安装一个主詹金斯和另一个从詹金斯 然后主詹金斯将控制从詹金斯 例如通
  • Visual Studio 2015 输出窗口丢失

    缺少显示 Visual Studio 中所有构建消息的输出窗口 我无法使用视图菜单将其恢复 我尝试了安全模式和诊断模式 然后重新启动了一切 怎样才能把窗户找回来 去引用MSDN 在 Visual Studio Express 版本中 输出
  • Rtti 访问复杂数据结构中的字段和属性

    正如已经讨论过的Delphi 2010 中的 Rtti 数据操作和一致性可以通过使用一对 TRttiField 和实例指针访问成员来达到原始数据和 rtti 值之间的一致性 对于仅具有基本成员类型 例如整数或字符串 的简单类 这将非常容易
  • 具有属性包装器的不可用属性

    我正在开发一个支持 iOS 14 及更高版本的应用程序 但我想使用一些 SwiftUI 3 属性包装器 例如 FocusState 我该如何解决这个问题Stored properties cannot be marked potential
  • D3.js v3 到 v4 刷机改动

    我希望从 d3v3 迁移到 d3v4 特别是我在迁移画笔时遇到困难 有人可以查看下面的链接并让我知道更改吗 http bl ocks org zanarmstrong ddff7cd0b1220bc68a58 我发现了一些变化 d3 tim
  • 为 MAUI Visual Studio 2022 安装 Android 工作负载时出现问题

    我已按照以下说明安装了 Visual Studio 2022 Preview 4 1 https learn microsoft com en us dotnet maui get started installation 我启动了一个新的
  • 如何检查输入是否为二进制格式(1 和 0)?

    我已经制作了一个程序 但是如果用户输入不是二进制格式 我想添加一个例外 我已经尝试了很多次添加例外 但似乎无法让它工作 下面是程序代码 如果有人可以提供帮助 我将不胜感激 import time error True n 0 while n
  • makefile 中的错误:_start 的多个定义

    我尝试编写一个makefile CC g LD ld CFLAGS Wall std c 0x O3 LDFLAGS lgsl lgslcblas lpthread SOURCES main cpp OBJECTS SOURCES cpp
  • 使用 jdbc 和 oracle 驱动程序时结果集的存储位置

    一旦我将jdbc与oracle驱动程序一起使用并运行select查询 查询的结果是否存储在oracle内存或文件系统或临时表的服务器中 一旦我通过获取下一行来运行下一个方法 它是否会从 oracle 服务器内存加载到 jvm 内存 如果我将
  • 如何使用 Jest 和 Enzyme 模拟 React 组件生命周期方法?

    完整 DOM 渲染的 Enzyme 文档here包含以下使用 Sinon 监视生命周期方法的示例 describe
  • ffmpeg:连接视频和图像

    我有 2 个视频 相同的分辨率 相同的编码 文件 我想要连接它们 并且我想在它们之间插入一些文本 3 秒 作为分割器 我在 Windows 上使用 ffmpeg 执行此操作 我感兴趣的可选想法 避免在此过程中重新编码视频 在每个部分的交叉处
  • Presto SQL:使用作为查询结果的时区字符串更改时区不起作用

    我通过 Mode Analytics Platform 连接到 AWS Athena 并使用其查询引擎 基于 Presto 0 172 查询表 这张表public zones时区信息存储在名为的列中time zone在我感兴趣的一些区域 存
  • 使用 OpenCV 检测灰色物体

    我想使用 OpenCV 检测一个与场景中其他元素明显不同的对象 因为它是灰色的 这很好 因为我可以使用 R G B 运行测试 并且它允许独立于亮度 但逐像素执行速度很慢 有没有更快的方法来检测灰色的东西 也许有一个 OpenCV 方法可以进
  • xamarin Forms:根据键盘高度向上移动视图

    我正在使用 xamarin 表单 我用xaml设计了一个登录表单页面 我想在键盘出现时向上移动登录表单视图 以便文本字段和登录按钮在两个平台上都可见Android and IOS 如何计算键盘高度并通过动态计算键盘高度将登录表单视图向上移动