web-dev-qa-db-ja.com

iOSおよびユニバーサルWindowsアプリの画面密度

こんにちは、Windows 10/8/8.1およびiOSの画面の密度を知る必要があります。 Android DisplayMetricsを使用して画面密度を取得しましたが、UWPおよびiOSでそのようなオプション/プロパティを使用できないため、UWPおよびIOSで画面密度を取得できるプロパティはありますか?.

13
Sonali

更新-2018年6月8日

XamarinはXamarin.Essentialsをリリースしました!

Xamarin.Essentialsは、開発者にモバイルアプリケーション用のクロスプラットフォームAPIを提供します。

Android、iOS、UWPは、開発者がXamarinを活用してC#ですべてにアクセスできる独自のオペレーティングシステムとプラットフォームAPIを提供します。 Xamarin.Essentialsは、ユーザーインターフェイスの作成方法に関係なく、共有コードからアクセスできるXamarin.Forms、Android、iOS、またはUWPアプリケーションと連携する単一のクロスプラットフォームAPIを提供します。 https://github.com/xamarin/Essentials


これで、個々のプラットフォームコードをすべて管理する必要なく、デバイスのディスプレイ情報を照会できます。

デバイス表示情報- https://docs.Microsoft.com/en-us/xamarin/essentials/device-display

方法:

クラスにXamarin.Essentialsへの参照を追加します。

using Xamarin.Essentials;

次の情報は、APIを通じて公開されます。

// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;

// Orientation (Landscape, Portrait, Square, Unknown)
var orientation = mainDisplayInfo.Orientation;

// Rotation (0, 90, 180, 270)
var rotation = mainDisplayInfo.Rotation;

// Width (in pixels)
var width = mainDisplayInfo.Width;

// Height (in pixels)
var height = mainDisplayInfo.Height;

// Screen density
var density = mainDisplayInfo.Density;

役立つリンク:









元の投稿(Xamarin.Essentialsが存在する前)

以下では、Xamarin Forms staticクラスにあるApp varsに特定のOSの画面の詳細を保存しています。

これらはすべて私のテストで機能するようです。

(私のgithubページからコピー/貼り付け- https://github.com/mattregul/Xamarin_Screensize

Android(MainActivity.cs)- Githubページにジャンプ

// Store off the device sizes, so we can access them within Xamarin Forms
// Screen Width = WidthPixels / Density
// Screen Height = HeightPixels / Density

App.DisplayScreenWidth  = (double)Resources.DisplayMetrics.WidthPixels / (double)Resources.DisplayMetrics.Density;
App.DisplayScreenHeight = (double)Resources.DisplayMetrics.HeightPixels / (double)Resources.DisplayMetrics.Density; 
App.DisplayScaleFactor  = (double)Resources.DisplayMetrics.Density;

iOS(AppDelegate.cs)- Githubページにジャンプ

// Store off the device sizes, so we can access them within Xamarin Forms
App.DisplayScreenWidth  = (double)UIScreen.MainScreen.Bounds.Width;
App.DisplayScreenHeight = (double)UIScreen.MainScreen.Bounds.Height;
App.DisplayScaleFactor  = (double)UIScreen.MainScreen.Scale;

注すべてのWindowsの例で、screensizeはルートプロジェクトの名前空間です

UWP(App.xaml.cs)- Githubページにジャンプ

// You decided which is best for you...
//  Do you want Size of the App's View
//      or
//  Do you want the Display's resolution 
// ######################################

// Size of App's view
screensize.App.DisplayScreenHeight = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds.Height;
screensize.App.DisplayScreenWidth = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds.Width;

// Size of screen's resolution
//screensize.App.DisplayScreenWidth = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().ScreenHeightInRawPixels;
//screensize.App.DisplayScreenHeight = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().ScreenWidthInRawPixels;

// Pixels per View Pixel
// - https://msdn.Microsoft.com/en-us/windows/uwp/layout/design-and-ui-intro#effective-pixels-and-scaling
// - https://msdn.Microsoft.com/en-us/windows/uwp/layout/screen-sizes-and-breakpoints-for-responsive-design
screensize.App.DisplayScaleFactor = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

Windows Phone 8.1(App.xaml.cs)- Githubページにジャンプ

// Size of App's view
screensize.App.DisplayScreenHeight = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds.Height;
screensize.App.DisplayScreenWidth = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds.Width;

// Pixels per View Pixel
// - https://msdn.Microsoft.com/en-us/windows/uwp/layout/design-and-ui-intro#effective-pixels-and-scaling
// - https://msdn.Microsoft.com/en-us/windows/uwp/layout/screen-sizes-and-breakpoints-for-responsive-design
screensize.App.DisplayScaleFactor = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

Windows 8.1(App.xaml.cs)- Githubページにジャンプ

// Size of App's view
screensize.App.DisplayScreenHeight = Window.Current.Bounds.Height;
screensize.App.DisplayScreenWidth = Window.Current.Bounds.Width;
screensize.App.DisplayScaleFactor = 1; // No scaling here?  If you find a scaling for Windows 8.1, please let me know :)

Xamarinフォームページ(App.cs)- Githubページにジャンプ

namespace screensize
{
    public class App : Application
    {
        public static double DisplayScreenWidth = 0f;
        public static double DisplayScreenHeight = 0f;
        public static double DisplayScaleFactor = 0f;

        public App()
        {

            string ScreenDetails = Device.OS.ToString() + " Device Screen Size:\n" +
                $"Width: {DisplayScreenWidth}\n" +
                $"Height: {DisplayScreenHeight}\n" +
                $"Scale Factor: {DisplayScaleFactor}";

            // The root page of your application
            var content = new ContentPage
            {
                Title = "Xamarin_GetDeviceScreensize",
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            HorizontalTextAlignment = TextAlignment.Center,
                            FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label)),
                            Text = ScreenDetails
                        }
                    }
                }
            };

            MainPage = new NavigationPage(content);
        }

    }
}
38
Matthew Regul

このリストには、iOSデバイスのdpi情報がリストされます。 GBDeviceInfo サードパーティツールを使用して、IOSこのようなデバイスの画面密度を取得することもできます[GBDeviceInfo deviceInfo].displayInfo.pixelsPerInch;

IOS:

   iPhones
iPhone 1/3G/3GS           320 x  480    163 ppi
iPhone 4/4S               640 x  940    326 ppi
iPhone 5/5C/5S            640 x 1136    326 ppi
iPhone 6/6S               750 x 1334    326 ppi
iPhone 6 Plus/6S Plus    1080 x 1920    401 ppi
  Without downsampling:  1242 x 2208    461 ppi

Except for the 6th generation (= 5th) iPod touch,
all the models are equal to their iPhone counterparts

iPads
iPad 1/2                  768 x 1024    132 ppi
iPad 3/4/Air/Air 2       1536 x 2048    264 ppi
iPad Mini 1               768 x 1024    163 ppi
iPad Mini 2/3/4          1536 x 2048    326 ppi
iPad Pro                 2737 x 2048    264 ppi

Apple Watches
Apple Watch 38 mm         272 x  340    326 ppi
Apple Watch 42 mm         312 x  390    326 ppi

UWPで [〜#〜] api [〜#〜] を見つけて、デバイスのdpiを取得しました。 Windows.Graphics.Display.DisplayInformation。あなたはそれを試すことができます。

1
Nico Zhu - MSFT