Nativescript android删除操作栏

Posted

技术标签:

【中文标题】Nativescript android删除操作栏【英文标题】:Nativescript android remove action bar 【发布时间】:2016-01-27 15:53:06 【问题描述】:

我正在尝试使用 Nativescript 开发 android 应用程序并尝试删除操作栏(带有“testns”标题的顶部栏),但不知道如何。 我正在使用下面的代码但不工作。目前使用 tns v.1.3.0

var frameModule = require("ui/frame"); exports.pageLoaded = function() var topmost = frameModule.topmost(); topmost.android.showActionBar = false; ;

【问题讨论】:

【参考方案1】:

您可以通过设置 Page 的 actionBarHidden 属性来显式控制 ActionBar 的可见性,如下所示:

import Page from "ui/page";

export class AppComponent 
    constructor(page: Page) 
        page.actionBarHidden = true;
    

【讨论】:

在早期版本中,root 始终是 Frame,因此默认情况下会有 Page。现在这不适用于最新版本的 nativescript。使用最新版本,您可以在应用程序中定义灵活的根组件和任意数量的框架(page-router-outlet)。所以不会在应用程序组件中创建默认的框架/页面。页面只能注入到那些在 page-router-outlet 中加载的组件中。【参考方案2】:

最后我找到了如何删除操作栏的答案。通过在 xml 文件中的标签页内添加actionBarHidden = "true"

<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded" actionBarHidden="true">
</Page>

【讨论】:

还有其他方法吗?我不使用页面标签 @Elgendy 如果您使用 Angular,则使用指令,我已经发布了一个答案,展示了如何使用它。 还有其他方法吗?我不使用页面标签或角度【参考方案3】:

这是在 NativeScript Angular TypeScript 组件中隐藏 ActionBar 的代码。

import  Component, OnInit  from "@angular/core";
import  Page  from "tns-core-modules/ui/page";

export class AppComponent implements OnInit 

    constructor(private page: Page) 
    

    ngOnInit(): void 
        this.page.actionBarHidden = true;
    

【讨论】:

适用于 Android 和 ios,但尝试在浏览器中运行 Angular 应用程序时崩溃【参考方案4】:

如果您使用 Angular 并且没有在 html 中使用 page,或者您正在使用模块的延迟加载,或者您有多个 page-router-outlet,那么您可以利用 directives。

创建一个新指令:

hideActionBar.ts

import  Directive  from '@angular/core';
import  Page  from 'tns-core-modules/ui/page/page';

@Directive(
    selector: '[hideActionBar]'
)
export class HideActionBarDirective 
    constructor(private page: Page) 
        this.page.actionBarHidden = true;
    

并将此指令用于要隐藏操作栏的 html。

SecondPage.html

<GridLayout tkExampleTitle tkToggleNavButton rows="auto,*" hideActionBar>
 ...// other html goes here
</GridLayout>

附:不要忘记在 NgModule 中声明它,因为指令是 declarables。这对于代码共享项目非常有用,因为您将在 ngmodule.tns.ts 中声明它,并且不会为 Web 项目编译它。

declarations: [
 AppComponent,
 MyDirective
],

【讨论】:

一个非常优雅的利用 Angular 的解决方案。 这个答案对于code-sharing 项目来说是必不可少的(也是唯一有效的)。谢谢! 不知道为什么上面的所有解决方案都对我有用 - 但网格的第一行不在屏幕上【参考方案5】:

&lt;page-router-outlet actionBarVisibility="never"&gt;&lt;/page-router-outlet&gt;

在您的 [app.component.html] 文件中添加 [actionBarVisibility="never"]。它在我的项目中运行良好。

【讨论】:

这个答案应该更高。随着使用 page-router-outlet 的 Nativescript 的较新版本,这更加简单、快速和干净。谢谢。【参考方案6】:

有两种方法可以实现:

    XML 标记:只需将 'actionBarHidden="true"' 添加到您的页面标记中。 即<Page loaded="pageLoaded" actionBarHidden="true"> </Page>

    <StackLayout verticalAlignment="middle"> 
        <Button text=" abHidden ? 'Show ActionBar' : 'Hide ActionBar' " tap="onTap" textWrap="true" class="fa" />
    </StackLayout>
    

在你的 .ts 中

export function onNavigatingTo(args: EventData) 
    const page = <Page>args.object;
    const vm = new Observable();
    vm.set("abHidden", value);
    page.bindingContext = vm;

【讨论】:

【参考方案7】:

ActionBar 
  height: 0;
<ActionBar [title]="appTitle">
</ActionBar>

【讨论】:

添加一个段落或解释发帖者如何使用此代码来解决他/她的问题可能会有所帮助。并且可能为什么他/她发布的代码没有。【参考方案8】:

从“@angular/core”导入组件,OnInit; 从“@nativescript/core”导入 Page ;

@组件( 选择器:“ns-items”, templateUrl: "./items.component.html", ) 导出类 ItemsComponent 实现 OnInit

constructor(
    private page: Page
    )  
    

ngOnInit(): void 
    this.page.actionBarHidden = true;

【讨论】:

以上是关于Nativescript android删除操作栏的主要内容,如果未能解决你的问题,请参考以下文章

Nativescript - 在 Android 中隐藏状态栏

Nativescript Vue Android 键盘覆盖 TextView 或键盘覆盖操作栏

Nativescript - 搜索栏在操作栏中无法正确显示(IOS)

Nativescript radListView 不显示项目

NativeScript 中的状态栏样式

用于 Nativescript-Vue 的搜索栏的 DismissSoftInput()