Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4171862
  • 博文数量: 864
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8336
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
  • 认证徽章:
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(864)

文章存档

2019年(21)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2019-08-25 19:05:39

编辑的区别
您可能认为编辑器具有比Entry更广泛的API,因为它可以处理多行甚至文本段落。 但在Xamarin.Forms中,编辑器API实际上更简单一些。 除了从InputView继承Keyboard属性之外,Editor还自己定义了一个属性:基本的Text属性。 编辑器还定义了与Entry相同的两个事件:

  • TextChanged
  • Completed

但是,已完成的活动必然会有所不同。虽然return或enter键可以表示条目的完成,但是与编辑器一起使用的这些相同的键代替标记段落的结尾。
Editor的Completed事件在三个平台上的工作方式略有不同:对于iOS,Xamarin.Forms在键盘上方显示一个特殊的Done按钮,用于解除键盘并导致Completed事件触发。在Android和Windows 10 Mobile上,系统后退按钮 - 纵向模式下手机左下角的按钮 - 取消键盘并触发已完成事件。此“返回”按钮不会为“条目”视图触发“已完成”事件,但它会关闭键盘。
用户输入编辑器的内容可能不是电话号码和URL,而是实际的单词,句子和段落。在大多数情况下,您需要使用文本键盘编辑器,因为它提供拼写检查,建议和句子的第一个单词的自动大写。如果您不想要这些功能,Keyboard类提供了另一种使用静态Create方法和KeyboardFlags枚举的以下成员指定键盘的方法:

  • CapitalizeSentence (equal to 1)
  • Spellcheck (2)
  • Suggestions (4)
  • All (xFFFFFFFF)

Text键盘相当于使用KeyboardFlags.All创建键盘。 默认键盘相当于使用(KeyboardFlags)0创建键盘。 您无法使用这些标志在XAML中创建键盘。 它必须在代码中完成。
JustNotes程序旨在作为一个自由形式的笔记记录程序,通过使用Application类的Properties集合自动保存和恢复Editor视图的内容。 该页面基本上由一个大型编辑器组成,但为了给用户一些关于程序功能的线索,程序的名称显示在顶部。 在iOS和Android上,可以通过页面的Title属性设置此类文本,但要显示该属性,ContentPage必须包装在ApplicationPage中(正如您在第13章中使用ToolbarDemo程序所发现的那样)。 这是在App类的构造函数中完成的:


点击(此处)折叠或打开

  1. public class App : Application
  2. {
  3.     public App()
  4.     {
  5.         MainPage = new NavigationPage(new JustNotesPage());
  6.     }
  7.     protected override void OnStart()
  8.     {
  9.         // Handle when your app starts
  10.     }
  11.     protected override void OnSleep()
  12.     {
  13.         // Handle when your app sleeps
  14.         ((JustNotesPage)(((NavigationPage)MainPage).CurrentPage)).OnSleep();
  15.     }
  16.     protected override void OnResume()
  17.     {
  18.         // Handle when your app resumes
  19.     }
  20. }

App中的OnSleep方法调用JustNotesPage代码隐藏文件中定义的名为OnSleep的方法。 这是编辑器的内容保存在应用程序内存中的方式。
XAML页面的根元素设置Title属性。 页面的其余部分由填充了编辑器的AbsoluteLayout占用:

点击(此处)折叠或打开

  1. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  3.              x:Class="JustNotes.JustNotesPage"
  4.              Title="Just Notes">
  5.     <StackLayout>
  6.         <AbsoluteLayout VerticalOptions="FillAndExpand">
  7.             <Editor x:Name="editor"
  8.                     Keyboard="Text"
  9.                     AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
  10.                     AbsoluteLayout.LayoutFlags="All"
  11.                     Focused="OnEditorFocused"
  12.                     Unfocused="OnEditorUnfocused" />
  13.         </AbsoluteLayout>
  14.     </StackLayout>
  15. </ContentPage>

那么为什么程序使用AbsoluteLayout来托管编辑器呢?
JustNotes计划正在进行中。 它不适合iOS。 您可以回想一下,当Entry视图位于屏幕底部时,您希望将其放在ScrollView中,以便在显示iOS虚拟键盘时向上滚动。 但是,因为Editor实现了自己的滚动,所以不能将它放在ScrollView中。
因此,当编辑器获得输入焦点以使键盘不与其重叠时,代码隐藏文件将编辑器的高度设置为AbsoluteLayout高度的一半,并在输入丢失时恢复编辑器高度 焦点:

点击(此处)折叠或打开

  1. public partial class JustNotesPage : ContentPage
  2. {
  3.     public JustNotesPage()
  4.     {
  5.         InitializeComponent();
  6.         // Retrieve last saved Editor text.
  7.         IDictionary<string, object> properties = Application.Current.Properties;
  8.         if (properties.ContainsKey("text"))
  9.         {
  10.             editor.Text = (string)properties["text"];
  11.         }
  12.     }
  13.     void OnEditorFocused(object sender, FocusEventArgs args)
  14.     {
  15.         if (Device.OS == TargetPlatform.iOS)
  16.         {
  17.             AbsoluteLayout.SetLayoutBounds(editor, new Rectangle(0, 0, 1, 0.5));
  18.         }
  19.     }
  20.     void OnEditorUnfocused(object sender, FocusEventArgs args)
  21.     {
  22.         if (Device.OS == TargetPlatform.iOS)
  23.         {
  24.             AbsoluteLayout.SetLayoutBounds(editor, new Rectangle(0, 0, 1, 1));
  25.         }
  26.     }
  27.     public void OnSleep()
  28.     {
  29.         // Save Editor text.
  30.         Application.Current.Properties["text"] = editor.Text;
  31.     }
  32. }

当然,这种调整只是近似的。 它因设备而异,并且因纵向和横向模式而异,但目前Xamarin.Forms中没有足够的信息可以更准确地完成。 目前,您可能应该将编辑器视图的使用限制在页面的顶部区域。
与编辑器操作相比,保存和恢复编辑器内容的代码相当平淡无奇。 OnSleep方法(从App类调用)使用“text”键将属性字典中的文本保存,构造函数将其恢复。
这是在所有三个平台上运行的程序,文本键盘在视图中提供了单词建议。 在Windows 10 Mobile屏幕上,已选择一个单词,可能会将其复制到剪贴板以便以后进行粘贴操作:
201809192005330403
阅读(41) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册