在 windows phone 8.1 以后,当一个前台 app 处于 “全屏模式” 时,用户需要 “双击” 手机搜索按钮才能显示搜索框。
这是为了避免用户 “误触发” 搜索操作。 App 可以通过编程设置是否显示为 “full-screen” mode。
在 wp8 以前,很多用户都会抱怨,在玩游戏或者看视频时,由于 “误触” 了搜索键,导致游戏或视频暂停。如果
应用能够开启 “双击触发” 的交互,相信提升了不少用户体验。
1)双击 “搜索按钮” 打开系统搜索:
(在 wp8.1 上,开启系统搜索,需要把系统 “位置” 设置为 关闭,否则默认启动 cortana。不过双击效果一样)
2)两次 “向下划动”,打开系统 “通知中心”
全屏模式,在以下情况时默认开启:
1)相片浏览(Photo viewer)
2)视频浏览 (Video viewer)
3)照片拍摄 (Caputring a photo)
4)所有的类型为 “游戏” 的 app(Any app in with the Games category)
两次单击的默认间隔时间是 2500 毫秒。因此,在 app 处于全屏模式时,
必须在 2500毫秒内两次双击 “Search” 按钮时,才能触发搜索。这个默认的时间
可以通过修改系统的注册表(CustomHoldDelays 的 value进行修改,单位为毫秒):
HKEY_LOCAL_MACHINESoftwareMicrosoftShellCustomHoldDelays
这个设置对于app 的使用者是不可见的。
这个改变的另外的一个影响就是,当 app 处于 full-screen mode 时,用户必须 “向下划动” 两次
才能打开通知中心。
MediaElement 示例 (运行在 wp8.1 系统的手机上):
1、在 wp8 的 silverlight 的工程中
1) 如果只是在 xaml 中添加一个 MediaElement 的控件,并不能启动 “full-screen” mode:
<Grid x:Name="LayoutRoot" Background="Transparent"> <MediaElement Source="李玉刚.mp4" AutoPlay="True" /> </Grid>
2)使用系统 Task ,调用系统的播放器,默认是 “full-screen” mode:
Microsoft.Phone.Tasks.MediaPlayerLauncher l = new Microsoft.Phone.Tasks.MediaPlayerLauncher(); // 路径为系统安装包。如果是 MediaLocationType.Data,则可以指定网络路径 l.Location = Microsoft.Phone.Tasks.MediaLocationType.Install; l.Media = new Uri("李玉刚.mp4", UriKind.Relative); l.Controls = Microsoft.Phone.Tasks.MediaPlaybackControls.All; // 显示所有系统播放器的按钮 l.Show();
2、在 wp8.1 的 Store 工程中
1)如果只是把 MediaElement 的 “全屏” 属性设置为 IsFullWindow="True" ,并不能开启 “full-screen” mode
<Grid> <MediaElement Source="李玉刚.mp4" AutoPlay="True" IsFullWindow="True" /> </Grid>
需要把 AreTransportControlsEnabled 属性设置为 true ,即使用 MediaElement 的默认控件,才能开启 “full-screen” mode:
<Grid> <MediaElement AreTransportControlsEnabled="True" Source="李玉刚.mp4" AutoPlay="True" IsFullWindow="True" /> </Grid>
显示效果:
2)使用系统播放器打开,默认启动 “full-screen” mode:
async void MainPage_Loaded(object sender, RoutedEventArgs e) { // 读取安装包中,根目录下的视频文件 Windows.Storage.StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("李玉刚.mp4"); await Windows.System.Launcher.LaunchFileAsync(file); }