我为屏幕创建了两个xml文件。一个名为" login-page.port.xml"另一个是" login-page.land.xaml"。
有没有办法以编程方式检测应用程序中的方向变化?
谢谢, Keks
答案 0 :(得分:5)
是的,有一种方法可以检测应用程序中的方向更改。最简单的方法是在您想要获得方向的页面中;将已加载和已卸载的事件添加到page.xml文件中:
<Page loaded="pageLoaded" unloaded="pageUnloaded">
在你的page.js文件中;添加如下代码:
var application=require('application');
exports.pageLoaded = function() {
application.on(application.orientationChangedEvent, setOrientation);
};
exports.pageUnloaded = function() {
application.off(application.orientationChangedEvent, setOrientation);
}
function setOrientation(args) {
// Will console out the new Orientation
console.log(args.newValue);
}
几个笔记; 你要添加&amp;在进入和退出页面时删除事件监听器;否则,听众是全球性的,即使你在另一个页面上,当方向改变时也会继续发射。 2.您可以为此事件添加多个侦听器,因此,如果您不删除侦听器,则每次重新加载此页面时,您将向该组添加此侦听器的另一个副本,因此它将触发多次因为你已经添加了它。 3.在v1.6.1中的android上,它们是方向触发中的错误。 https://github.com/NativeScript/NativeScript/issues/1656(基本上,如果你从横向开始,旋转它将无法检测到它。问题是我已经手动应用到我的代码中的补丁。)
现在看看你的实际例子;你是否意识到至少从1.6x版本的NativeScript开始,它只会加载当前设置为哪个方向的XML;但是在旋转时它不会加载另一个方向的xml。所以,如果你在景观;进入屏幕然后旋转它仍将使用Landscape xml文件。
现在所有这些说你可能会认真考虑查看我作为其作者的nativescript-orientation插件,这个插件简化了处理屏幕方向并允许你只有一个.xml文件,然后通过的CSS。
答案 1 :(得分:1)
请参阅on method found in the documentation
on(event:“orientationChanged”,callback:function,thisArg?:any): application在application / application.d.ts中定义:232引发此事件 当前设备的方向已经改变。
参数
事件:“orientationChanged”
回调:功能
(args:OrientationChangedEventData):void参数
args:OrientationChangedEventData
返回void可选thisArg:any
返回任何
@Component({
selector: "Test"
//templateUrl, styleUrls, etc...
})
export class TestComponent{
constructor(){
on("orientationChanged", this.onOrientationChanged)
}
public onOrientationChanged = (evt) => {
console.log("Orientation has changed !");
console.log(evt.eventName); // orientationChanged
console.log(evt.newValue); //landscape or portrait
};
}