Как получить начальную ориентацию устройства в NativeScript с помощью Angular 2

#nativescript #angular2-nativescript

#nativescript #angular2-nativescript

Вопрос:

Я начинаю работу с 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']);
        }
    }
}
  

Ответ №1:

 private activity:any = application.android.foregroundActivity;
this.activity.getResources().getConfiguration().orientation;
  

Комментарии:

1. Это правильно, но это зависит от Android. Похоже, мы пропустили экспорт API для этого. Хорошая возможность для запроса на извлечение 😉

Ответ №2:

Вы могли бы использовать этот плагин. Чтобы получить доступ к обновленной версии, вам нужно будет оплатить ежемесячную подписку разработчикам, которые поддерживают ProPlugins.

Вы можете установить последнюю бесплатную версию с помощью:

 npm i nativescript-orientation
  

Это не дает никаких гарантий, что оно будет работать, особенно в {N} 6 .

После установки вы можете получить текущую ориентацию экрана следующим образом:

 const orientation = require("nativescript-orientation");
console.log(orientation.getOrientation());
  

Ответ №3:

Хотя я не знаю помощника для определения начальной ориентации, вы все равно можете получить текущие размеры экрана. Вы можете импортировать модуль screen из основной библиотеки.

import { screen } from 'tns-core-modules/platform';

Затем при инициализации приложения определите ориентацию, определив, больше ли высота экрана, чем ширина:

this.orientation = screen.mainScreen.heightPixels > screen.mainScreen.widthPixels ? 'portrait' : 'landscape';

Редактировать: это может быть непоследовательным и не полностью протестировано (это означает, что высота экрана не всегда может быть высотой экрана в портретном режиме). Если это так, при загрузке страницы вы можете использовать ту же стратегию для измерения элемента главной страницы и сравнения высоты и ширины представления для определения ориентации.