01 Size单位- device-independent units & StartTimer!

作者: 归零者 分类: 外延扩展 发布时间: 2017-09-06 11:41



学习目标

  1. public
    class
    WhatSizePage : ContentPage
  2. {

  3. Label label;
  4.  
     

  5. public
    WhatSizePage()
  6. {
  7. label = new
    Label
  8. {

  9. FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),

  10. HorizontalOptions = LayoutOptions.Center,

  11. VerticalOptions = LayoutOptions.Center
  12. };
  13.  
     

  14. Content = label;

  15. SizeChanged += OnPageSizeChanged;
  16. }
  17.  
     

  18. void
    OnPageSizeChanged(object sender, EventArgs args)
  19. {
  20. label.Text = String.Format(“{0} \u00D7 {1}”, Width, Height);
  21. }
  22. }

结果为:



若将转成横向的结果为:头请横着看…


 

 

辨识手机方向为横向(landscape)或直向(portrait) 

唯一方法就是判断其宽跟高的关系,当宽大于高时就是横向(landscape),反之为直向(portrait)。

if( Width > Height )
{
    …
}

往后的书上也会看到实际的程式范例,当我们要在不同方向时处理不同事情时,会将宽高判断写在SizeChanged内。

此外,若你想锁定App方向时:

iOS:Visual Studio内, iPhone Deployment Info选项,选择Supported Device Orientations,就能指定App的方向。


Android:在Droid专案底下,MainActivity.cs档案内,Activity加上
ScreenOrientation = ScreenOrientation.Landscape 

ScreenOrientation = ScreenOrientation.Portrait


Device.StartTimer

Device类别内有提供一个 StartTimer方法可以使用,设定好间隔时间后,就能周期性的触发事件。

StartTimer内要带入的参数为TimeSpan类别。

底下的范例程式,其功能为使用Label显示目前时间,

且在SizeChanged事件时会去更改Label字体大小,让画面更…美观:

  1. public
    class
    FitToSizeClockPage : ContentPage
  2. {

  3. public
    FitToSizeClockPage()
  4. {

  5. Label clockLabel = new
    Label
  6. {

  7. HorizontalOptions = LayoutOptions.Center,

  8. VerticalOptions = LayoutOptions.Center
  9. };

  10. Content = clockLabel;

  11. // Handle the SizeChanged event for the page.

  12. SizeChanged += (object sender, EventArgs args) =>
  13. {

  14. // Scale the font size to the page width

  15. // (based on 11 characters in the displayed string).

  16. if (this.Width > 0)
  17. clockLabel.FontSize = this.Width / 6;
  18. };

  19. // Start the timer going.

  20. Device.StartTimer(TimeSpan.FromSeconds(1), () =>
  21. {

  22. // Set the Text property of the Label.
  23. clockLabel.Text = DateTime.Now.ToString(“h:mm:ss tt”);

  24. return
    true;
  25. });
  26. }
  27. }


这程式有三点要注意的:

  1. 间隔时间参数TimeSpan. 的用法。
  2. 更改Label.Text的事件写在  Lambda 语法内,而Lambda写法的优点就是便于维护(事件较靠近物件)。
  3. Device.StartTimer内的事件要return  true,计时器才会继续执行下一个周期。


执行结果:


当然,倒过来时文字会较大(美观~):


第五章我其实省略满多东西… 只挑我觉得重要的部分来说明,有兴趣的可以翻翻原文,这里提供官方PDF :

https://download.xamarin.com/developer/xamarin-forms-book/XamarinFormsBook-Ch05-Apr2016.pdf

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

说点什么

avatar
  Subscribe  
提醒
跳至工具栏