我开始使用NativeScript + Angular 2,我想实现一个根据设备方向激活不同路由的组件。经过大量搜索后,我能够正常工作,但我还没有弄清楚如何获得初始设备方向,这听起来应该更容易。
这是我的AppComponent
代码。看看ngAfterViewInit
:
import {Component, OnInit, OnDestroy, AfterViewInit} from "@angular/core";
import {Router} from "@angular/router";
import _application = require('application');
@Component({
selector: "my-app",
templateUrl: "app.component.html",
})
export class AppComponent implements OnInit, AfterViewInit, OnDestroy {
constructor(private router: Router) {}
ngOnInit() {
_application.on(_application.orientationChangedEvent, this.setOrientation.bind(this));
}
ngAfterViewInit() {
// How do I get the initial orientation here instead of hardcoding to 'portrait'?
this.setOrientation({newValue: 'portrait'})
}
ngOnDestroy() {
_application.off(_application.orientationChangedEvent, this.setOrientation);
}
setOrientation(args) {
if (args.newValue === 'landscape') {
this.router.navigate(['/landscape']);
} else {
this.router.navigate(['/portrait']);
}
}
}
答案 0 :(得分:2)
private activity:any = application.android.foregroundActivity;
this.activity.getResources().getConfiguration().orientation;
答案 1 :(得分:0)
您可以使用this plugin。为了获得最新版本的访问权限,您需要每月向维护ProPlugins的开发人员支付费用。
您可以使用以下方法安装它的最后一个免费版本:
npm i nativescript-orientation
这没有任何保证,特别是在{N} 6+中。
安装后,您可以像这样获得当前屏幕方向:
const orientation = require("nativescript-orientation");
console.log(orientation.getOrientation());
答案 2 :(得分:0)
虽然我无法确定我所知道的初始方向,但是仍然可以获取当前屏幕尺寸。您可以从核心库中导入屏幕模块。
import { screen } from 'tns-core-modules/platform';
然后在应用程序初始化时,通过确定屏幕高度是否大于宽度来确定方向:
this.orientation = screen.mainScreen.heightPixels > screen.mainScreen.widthPixels ? 'portrait' : 'landscape';
编辑:这可能是不一致的,并且没有经过充分测试(这意味着屏幕高度可能不总是纵向模式下的屏幕高度)。如果是这种情况,那么在页面加载时,您可以使用相同的策略来测量主Page元素,并比较视图的高度和宽度以确定方向。