首页 文章

如何正确引用NativeScript 4中的模态

提问于
浏览
1

我用NativeScript Angular构建了一个应用程序(现在在v4.1上) . 我使用下面的代码在Android上设置状态栏颜色,通过使用角度路由可以很好地处理“常规”视图:

if (isAndroid) {
  if (app.android && device.sdkVersion >= '21') {
    const nativeColor = new Color('purple').android;
    const window = app.android.startActivity.getWindow();
    window.addFlags(android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    app.android.startActivity.getWindow().setStatusBarColor(nativeColor);
  }
}

但是,它在模态中不起作用,其中彩色状态栏变为黑色 . 任何想法为什么会这样?我最好的猜测是 app.android.startActivity.getWindow() 没有引用模态,但我不清楚如何得到它 .

不知道这与程度有什么关系,但我也无法通过使用文档中的代码在iOS上设置不同的加载指示器(在非模态视图中再次正常工作):

if (isIOS) {
  var indicator = this.page.getViewById("spinner");
  indicator.ios.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge;
}

感谢您的任何指示!

附:

这是一个demo project,它显示了Android上状态栏的问题,以及无法在iOS上设置活动指示器 .

1 回答

  • 0

    对于以后阅读本文的人:我在NativeScript forum上有一些帮助,但还没有完成在模态上设置状态栏颜色,但我能够在模态组件的状态栏下跨越背景,这对我来说已经足够了目的 .

    我还能够简单地通过在指标元素上使用Angular ViewChild 来改变模态中的ActivityIndicator而不是通过 Page 找到它(事实证明它不是指模态) .

    import { Component, OnInit, AfterViewInit, ViewChild, ElementRef } from "@angular/core";
    import { ModalDialogParams } from "nativescript-angular/modal-dialog";
    import { isIOS, isAndroid, device } from 'platform';
    import * as app from "application";
    
    declare var UIActivityIndicatorViewStyle: any;
    declare var android: any;
    
    @Component({
        template: `
            <StackLayout #root>
                <StackLayout orientation="horizontal">
                    <ActivityIndicator #spinner id="spinner" busy="true"></ActivityIndicator>
                    <ActivityIndicator busy="true"></ActivityIndicator>
                </StackLayout>
            </StackLayout>
        `
    })
    export class ModalTest implements OnInit, AfterViewInit {
        @ViewChild('root') root: ElementRef;
        @ViewChild('spinner') spinner: ElementRef;
    
        constructor(
            public modalParams: ModalDialogParams
        ) {}
    
        public ngOnInit() {
    
            /* show large activity indicator on iOS */
    
            if (isIOS) {
                this.spinner.nativeElement.ios.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge;
            }
        }
    
        public ngAfterViewInit() {
            if (isAndroid) {
    
                setTimeout(() => {
                    if (app.android && device.sdkVersion >= '21') {
                        const dialog = this.root.nativeElement._dialogFragment.getDialog();
                        const window = dialog.getWindow();
                        window.addFlags(android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                    }
                },1);
            }
        }
    
        public closeModal() {
            this.modalParams.closeCallback();
        }
    }
    

相关问题