使用Xamarin Forms获取设备属性?

时间:2014-10-24 07:06:54

标签: xamarin xamarin.forms

我正在使用xamarin表单设计一个跨平台的应用程序。 每个页面/视图/从后面的代码设计的表单。现在我想读取用户使用的设备的高度和宽度。根据这些值,我想放置一些页眉和页脚。

3 个答案:

答案 0 :(得分:42)

要在Xamarin.Forms解决方案中获取屏幕宽度(或高度),我通常会添加以下几行代码:

  1. 在共享代码中定义公共静态属性,最好在App.cs

    static public int ScreenWidth;
    
  2. FinishedLaunching的{​​{1}}开头为iOS初始化它:

    AppDelegate.cs
  3. App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width; 的{​​{1}}中为Android初始化它(如上所述here

    OnCreate

    (除以密度,这会产生与器件无关的像素。)

  4. 我没有使用Windows Phone,但应该有一个等效的命令。当然,获得屏幕高度的工作方式也相似。

    现在,您可以在代码中的任意位置访问MainActivity.cs

答案 1 :(得分:2)

Xamarin Forms Labs here中,有类和示例可以获取设备屏幕信息,例如您所使用的内容。

还有一些关于实现此功能以及获取您需要的{strong>设备对象here的进一步说明。

另一方面,如果您只关注标题页脚,那么为什么不使用内置的 Xamarin.Forms 控件来自动-expand 控件布局等,会根据用户设备的屏幕自动调整?

我的印象是您希望采用 AbsoluteLayout 方法并自行指定值?如果是这样,真的没有必要。特别是布局的页眉和页脚?

答案 2 :(得分:1)

我在我的viewmodel中执行此操作并且效果很好。您可以在代码隐藏中执行相同的操作。

public SomeViewModel
{
    private double width;
    private double Width
    {
        get { return width; }
        set
        {
            width = value;
            if (value != 0 && value != -1)
            {
                // device width found, set other properties
                SetProperties();
            }
        }
    }

    void SetProperties()
    {
        // use value of Width however you need
    }

    public SomeViewModel()
    {
         Width = Application.Current.MainPage.Width;
         var fireAndForget = Task.Run(GetWidthAsync);
    }

    public async Task GetWidthAsync()
    {
        while (Width == -1 || Width == 0)
        {
            await Task.Delay(TimeSpan.FromMilliseconds(1)).ConfigureAwait(false);
            // MainPage is the page that is using this ViewModel
            Width = Application.Current.MainPage.Width;
        }
    }
}

如果您希望在表单中的标签中显示Width以便使用绑定进行测试,请不要忘记将该属性从私有更改为公共。