Tôi đang cố gắng viết lại một ứng dụng mà tôi đã viết cho iOS. Tôi sẽ viết một phiên bản android nhưng nghĩ rằng sẽ tốt hơn nếu làm cho cơ hội này sử dụng Xamarin.Forms. Làm một trang tại một thời điểm, bây giờ tôi đang mắc kẹt trên một trang mà tôi cần để có được chiều rộng và chiều cao của màn hình. Có ai biết tương đương với View.Frame.Width của iOS trong Xamarin.Forms không?Cách nhận/phát hiện kích thước màn hình trong Xamarin.Forms?
Trả lời
Không có hiện một cách từ Xamarin.Forms bản thân nhưng chúng tôi có nó thực hiện như giao diện tương thích PCL trong Xamarin. Forms.Labs mà bạn có thể lấy từ NuGet hoặc mã nguồn từ GitHub.
https://github.com/XForms/Xamarin-Forms-Labs
IDevice có thuộc tính IDisplay với thông tin; mật độ pixel, chiều rộng, chiều rộng cho X & Y và một vài phương pháp mở rộng để tính toán kích thước tính bằng inch.
trang mẫu để nhận thông tin từ các thiết bị:
#region Display information
var display = device.Display;
var displayFrame = new Frame();
if (display != null)
{
displayFrame.Content = new StackLayout()
{
Children =
{
new Label() { Text = display.ToString() },
new Label() { Text = string.Format("Screen width is\t {0:0.0} inches.", display.ScreenWidthInches()) },
new Label() { Text = string.Format("Screen height is\t {0:0.0} inches.", display.ScreenHeightInches()) },
new Label() { Text = string.Format("Screen diagonal size is\t {0:0.0} inches.", display.ScreenSizeInches()) }
}
};
}
else
{
displayFrame.Content = new Label() { TextColor = Color.Red, Text = "Device does not contain display information." };
}
stack.Children.Add(displayFrame);
#endregion
Tạo một inch-by-inch khung chính xác trên tất cả các nền tảng bất kể thuộc tính hiển thị:
public class AbsoluteLayoutWithDisplayInfoPage : ContentPage
{
public AbsoluteLayoutWithDisplayInfoPage(IDisplay display)
{
this.Title = "Absolute Layout With Display Info";
var abs = new AbsoluteLayout();
var inchX = display.WidthRequestInInches(1);
var inchY = display.HeightRequestInInches(1);
var originX = display.WidthRequestInInches(display.ScreenWidthInches()/2);
var originY = display.HeightRequestInInches(display.ScreenHeightInches()/2);
abs.Children.Add(new Label() { Text = "1\"x\"1\" blue frame" });
abs.Children.Add(new Frame()
{
BackgroundColor = Color.Navy,
},
new Rectangle(originX - inchX/2, originY - inchY/2, inchX, inchY));
abs.Children.Add(new Frame()
{
BackgroundColor = Color.White
},
new Rectangle(originX - inchX/16, originY - inchY/16, inchX/8, inchY/8));
this.Content = abs;
}
}
To ge t đến thông tin thiết bị hoặc đặt trình phân giải DI của bạn hoặc sử dụng vùng chứa tĩnh. Cả 3 nền tảng có một thiết bị singleton gọi với tài sản CurrentDevice tĩnh:
resolverContainer.Register<IDevice>(t => WindowsPhoneDevice.CurrentDevice)
resolverContainer.Register<IDevice>(t => AppleDevice.CurrentDevice)
resolverContainer.Register<IDevice>(t => AndroidDevice.CurrentDevice)
Công thức
Tạo ứng dụng Xamarin.Android mới có tên ScreenSize. Sửa Main.axml để nó chứa hai TextView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="Screen Width:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/screenWidthDp" />
<TextView
android:text="Screen Height:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/screenHeightDp" />
</LinearLayout>
Sửa Activity1.cs, thay đổi mã trong OnCreate như sau:
[nhập mô tả hình ảnh ở đây] [1] riêng int ConvertPixelsToDp (float pixelValue) { var dp = (int) ((pixelValue) /Resources.DisplayMetrics.Density); trả lại dp; }
Chạy ứng dụng. Tùy thuộc vào thiết bị, nó sẽ hiển thị chiều cao và chiều rộng màn hình. Ảnh chụp màn hình sau đây là từ một Galaxy Nexus:
[image link] http://i.stack.imgur.com/TQhba.png
tôi đang tìm kiếm "Xamarin.Forms" cách cho điều này, nhưng nhờ. – dmc
Có một cách dễ dàng để có được chiều rộng và chiều cao của màn hình trong Xamarin.Forms
và truy cập nó trên toàn cầu từ khắp mọi nơi trong ứng dụng của bạn. Tôi muốn làm điều gì đó như thế này:
1. Tạo hai thành viên nào trong App.cs của bạn:
public static class App
{
public static int ScreenWidth;
public static int ScreenHeight;
...
}
2.Đặt các giá trị trong bạnMainActivity.cs
(Android) hoặc bạnAppDelegate.cs
(iOS):
Android:
protected override void OnCreate(Bundle bundle)
{
...
App.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels; // real pixels
App.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels; // real pixels
// App.ScreenWidth = (int)(Resources.DisplayMetrics.WidthPixels/Resources.DisplayMetrics.Density); // device independent pixels
// App.ScreenHeight = (int)(Resources.DisplayMetrics.HeightPixels/Resources.DisplayMetrics.Density); // device independent pixels
...
}
iOS:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
...
App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width;
App.ScreenHeight = (int)UIScreen.MainScreen.Bounds.Height;
...
}
App.cs không tĩnh – Julien
@Julien Trước Xamarin.Forms phiên bản 1.3.x. Một cách chính xác hơn được mô tả trong sách của chúng tôi trên http://xforms-kickstarter.com/ dưới ** Tham khảo kích thước màn hình **. – kaolick
Trên Android, tôi đề xuất sử dụng: var pixel = Resources.DisplayMetrics.WidthPixels; // dip pixels var scale = Resources.DisplayMetrics.Density; int dps = (int) ((pixel - 0.5f)/tỷ lệ); App.ScreenWidth = dps; pixel = Resources.DisplayMetrics.HeightPixels; // dip pixels dps = (int) ((pixel - 0.5f)/tỷ lệ); App.ScreenHeight = dps; // dip pixels – Maury
Trong tập tin ứng dụng của bạn định nghĩa một công biến tĩnh
public static Size ScreenSize;
Bạn nên khởi tạo biến cả trong IOS và Android trước khi gọi Trình xây dựng ứng dụng. Cho IOS, trong phương pháp FinishedLaunching
App.ScreenSize = new Size(UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height);
và cho Android, trong chức năng OnCreate
App.ScreenSize = new Xamarin.Forms.Size((int)(Resources.DisplayMetrics.WidthPixels/Resources.DisplayMetrics.Density), (int)(Resources.DisplayMetrics.HeightPixels/Resources.DisplayMetrics.Density));
Nếu bạn đang sử dụng Xamarin hình thức, sau đó bạn có thể tìm thấy chiều cao chiều rộng và màn hình hiện tại trong thư viện lớp cầm tay (PCL) như dưới đây.
Đối với Width bạn sử dụng này trong PCL,
Application.Current.MainPage.Width
Đối với chiều cao bạn có thể làm điều này trong PCL,
Application.Current.MainPage.Height
Tôi nhận được ngoại lệ thời gian chạy "Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng". –
điều này cung cấp cho bạn chiều rộng và chiều cao bạn xác định. không phải kích thước thiết bị màn hình thực tế. bạn có thể thêm vào xaml width = 5000 và nó sẽ trả lại cho bạn 5000. bạn phải đi nguyên bản để có kích thước màn hình thực tế. – batmaci
- 1. thước đo: Kích thước màn hình
- 2. Ảnh chụp màn hình của biểu mẫu có kích thước lớn hơn kích thước màn hình
- 3. Kích thước màn hình trong Visual Basic
- 4. Lấy kích thước màn hình trong Java
- 5. Iphone: Xem kích thước hoặc kích thước màn hình hiện tại
- 6. kích thước màn hình iOS 9
- 7. cách điều chỉnh kích thước nút theo Kích thước màn hình trong Android Studio
- 8. Android Studio - Cách thêm Định nghĩa Kích thước Màn hình
- 9. Kích thước màn hình Windows Phone 8?
- 10. Nhận kích thước màn hình trên OpenCV
- 11. Cách tìm kích thước màn hình của hai màn hình bằng cách sử dụng wx.displaySize()
- 12. Cách tạo mục UICollectionViewFlowLayoutSize động cho kích thước màn hình
- 13. Cách nhận kích thước màn hình thiết bị?
- 14. Cách nhận kích thước màn hình bằng mã?
- 15. Cách lấy kích thước màn hình từ xaml?
- 16. Hình nền và kích thước màn hình lớn
- 17. Có danh sách thiết bị nào có kích thước màn hình dpi và kích thước màn hình không?
- 18. Làm thế nào để có được kích thước của màn hình hiện tại trong WPF?
- 19. Kích thước màn hình của thiết kế Android bằng pixel?
- 20. kích thước jframe java swing trả về kích thước lớn hơn như màn hình
- 21. Hình nền toàn màn hình iOS cho tất cả các kích thước màn hình
- 22. Chia tỷ lệ kích thước UIFont so với kích thước màn hình
- 23. Nhận kích thước màn hình hiệu quả từ Java
- 24. iOS: UICollectionViewCell tự động điều chỉnh kích thước theo kích thước màn hình
- 25. Rails Image Định lại kích thước trên màn hình Xem?
- 26. Kích thước Sprite trên kích thước màn hình khác Andengine Android
- 27. Kích thước và mật độ màn hình Android
- 28. CSS và kích thước màn hình khác nhau?
- 29. Thông báo trên Màn hình Chrome - kích thước lớn hơn
- 30. Android nhận kích thước màn hình bằng XML
Cảm ơn @SKall, tôi không làm ứng dụng của tôi theo cách PCL - nhưng tôi chắc chắn sẽ xem xét và xem liệu tôi có thể nhận được một số ý tưởng hay không. Cảm ơn bạn! – dmc
Mã khóa học hoạt động cho dù sử dụng mã chia sẻ hoặc PCL. Trên mã chia sẻ bạn không cần DI, chỉ cần sử dụng cờ trình biên dịch để có được thiết bị hiện tại. – SKall
Cảm ơn bạn @SKall, sẽ thử điều này vào buổi sáng. – dmc