ユーザーインターフェイス / アクションバー

ユーザーインターフェイスアクションバー

この記事では、Angular NativeScript以外のアプリケーションでActionBarコンポーネントを使用する方法と、iOSおよびAndroidのいくつかの仕様について説明します。 説明されているすべてのシナリオは、適切なコードスニペットで示されています。 ActionBarは、AndroidのActionBarおよびiOSのNavigationBarを、NativeScript共通で抽象化したものです。

ActionBarの定義

ページ内でActionBarを定義する方法は次のとおりです。

<Page xmlns="http://schemas.nativescript.org/tns.xsd">
	<Page.actionBar>
		<ActionBar title="My ActionBar"/>
	</Page.actionBar>

	<!-- Page content ... -->
</Page>

これ以降にこの記事で例示するコードは、ActionBarタグ部分のみを記載しています。

タイトル

タイトルテキストの設定

ActionBarのtitleプロパティを使用してタイトルを設定します。

<ActionBar title="Application Title"></ActionBar>

結果は次のとおりです。

title-ios title-android

カスタムタイトルビューの使用

タイトルの代わりにレンダリングするカスタムタイトルビューを設定できます。 以下の例は、titleViewの画像とラベルを組み合わせる方法を示しています(例にはActionBar定義のみが含まれています)。

ActionBarタイトルの代わりにカスタムタイトルビューを作成する方法

<ActionBar title="test">
	<StackLayout orientation="horizontal"
		ios:horizontalAlignment="center"
		android:horizontalAlignment="left">
		<Image src="res://nativescript_logo" class="action-image"></Image>
		<Label text="ativeScript"  class="action-label"></Label>
	</StackLayout>
</ActionBar>
.action-image {
	width: 40;
	height: 40;
	vertical-align: center;
}

.action-label {
	color: #3C5AFD;
	font-size: 24;
	font-weight: bold;
	vertical-align: center;
}

結果は次のとおりです。

title-view-ios title-view-android

注釈: CSSを使用して、titleView内の要素のスタイルを設定できます。

アクションアイテムでのカスタムビューの使用

ActionItemテキストの代わりにレンダリングされるカスタムビューを設定できます。以下の例は、アイテム内の個別のラベルにロードする方法を示しています。

<Page>
	<Page.actionBar>
		<ActionBar>
			<ActionBar.actionItems>
				<ActionItem>
					<ActionItem.actionView>
						<StackLayout orientation="horizontal">
							<Label text="Green" color="green"/>
							<Label text="Red" color="red"/>
						</StackLayout>
					</ActionItem.actionView>
				</ActionItem>
			</ActionBar.actionItems>
		</ActionBar>
	</Page.actionBar>
	...
</Page>

Android用アプリアイコンの設定

アプリケーションアイコンはAndroidにのみ設定できます。 デフォルトでは、アプリケーションアイコンは非表示になっています。 android.iconVisibilityプロパティをalwaysに設定することで表示させることができます。

<ActionBar title="App Icon Demo" android.icon="res://icon" android.iconVisibility="always"></ActionBar>

結果は次のとおりです。

home-icon-android

ナビゲーションボタン

NavigationButtonコンポーネントは、iOSの戻るボタンとAndroidのナビゲーションボタンを共通で抽象化したものです。

<ActionBar title="App Icon Demo">
	<NavigationButton text="Go Back" android.systemIcon="ic_menu_back" tap="onNavBtnTap"/>
</ActionBar>
function onNavBtnTap() {
	// This code will be called only in Android.
	console.log("Navigation button tapped!");
}
exports.onNavBtnTap = onNavBtnTap;
export function onNavBtnTap(){
	// This code will be called only in Android.
	console.log("Navigation button tapped!");
}

結果は次のとおりです。

nav-btn-ios nav-btn-android

iOS固有

ボタンのデフォルトのテキストは、前のページのタイトルです。「テキストタイトルの設定」のtextの例に示すように、プロパティを設定することで変更できます。 iOSでは、戻るボタンはナビゲーションに明示的に使用されます。 このボタンは前のページに移動し、この動作をオーバーライドするようなタップイベントを記述することはできません。 ActionBarの左側にボタンを配置し、タップイベントを処理させる(スライドアウトを表示するなど)場合は、 ActionItemios.position="left"を記述してください。

Android固有

Androidでは、ナビゲーションボタン内にテキストを設定できません。 アイコンプロパティを使用して画像を設定できます(例:~\images\nav-image.png または res:\\ic_nav)。 また、android.systemIconを使用して、Androidで使用可能なシステムアイコンの1つを設定できます。 この場合、NavigationButtonタップイベントのデフォルトの動作はないため、実行されるコールバック関数を手動で定義する必要があります。

アクションアイテム

actionItemsコレクションを使用して追加のアクションボタンを定義できます。

<ActionBar title="Action Items">
	<ActionItem tap="onShare"
		ios.systemIcon="9" ios.position="left"
		android.systemIcon="ic_menu_share" android.position="actionBar"></ActionItem>
	<ActionItem tap="onDelete"
		ios.systemIcon="16" ios.position="right"
		text="delete" android.position="popup"></ActionItem>
</ActionBar>
function onShare(args) {
	console.log("Share action item tapped.");
}
exports.onShare = onShare;
function onDelete(args) {
	console.log("Delete action item tapped.");
}
exports.onDelete = onDelete;
export function onShare(args: observable.EventData) {
	console.log("Share action item tapped.");
}

export function onDelete(args: observable.EventData) {
	console.log("Delete action item tapped.");
}

結果は次のとおりです。

action-items-ios action-items-android

ポジショニング

次の配置オプションは、iOSおよびAndroidで使用できます。

Android(android.positionで設定):

iOS(ios.positionで設定):

アイコンを設定する

iconプロパティを使用して、アクション項目のテキストの代わりに画像を設定できます。 ローカル画像(例:~/images/add.png)またはリソース(例:res://ic_add)を使用できます。 アイコンの幅と高さを明示的に設定する方法はないため、推奨されるアプローチはリソースの使用です。

android.systemIconおよびios.systemIconプロパティを使用して、システムアイコンを表示できます。 システムアイコンを定義すると、アイコンとテキストプロパティの代わりにシステムアイコンが使用されます。

android.systemIconの値は、組み込みのAndroidシステムアイコンのリソース名に対応しています。 Androidの表記可能な完全なリストについては、Android Developer Siteにアクセスしてください。

ios.systemIconの値は、"UIBarButtonSystemItem"列挙体の数値です。

アイコンアイコン
0Done12Search
1Cancel13Refresh
2Edit14Stop
3Save15Camera
4Add16Trash
5FlexibleSpace17Play
6FixedSpace18Pause
7Compose19Rewind
8Reply20FastForward
9Action21Undo
10Organize22Redo
11Bookmarks23PageCurl

手法

ActionBarの表示または非表示

PageactionBarHiddenプロパティを設定することで、ActionBarの可視性を明示的に制御できます。

XMLでActionBarを非表示にします。

<Page actionBarHidden="true" loaded="onPageLoaded">
</Page>

コードビハインドでActionBarを非表示にします(TypeScript)。

export function onPageLoaded(args: EventData) {
	const page = <Page>args.object;
	page.actionBarHidden = true;
}

Androidではアプリケーションバーはデフォルトで表示され、タイトルなどのアプリケーションの名前が表示されます。 ナビゲーションボタンは、アプリケーションで明示的に定義されている場合にのみ表示されます。

iOS、アプリケーションバーが空の場合(たとえば、タイトルやアクションアイテムが定義されていない場合)、最初のページで非表示になり、 ナビゲーションボタンをホストするためのナビゲーション後に自動的に表示されます。 ActionBarが空でない場合(たとえば、タイトルまたはアクションアイテムが定義されている場合)、最初のページにも表示されます。

アクションアイテムの非表示

ActionItemのvisibilityプロパティを使用して、アイテムを動的に非表示および表示できます。可視性にバインディングを使用することもできます。

アプリが「editing」モードのときにさまざまなアクションアイテムを表示する例を次に示します。

<ActionBar title="Action Items Visibility">
	<ActionItem tap="onEdit" ios.systemIcon="2" android.systemIcon="ic_menu_edit" ios.position="right"
		visibility="{{ isEditing ? 'collapse' : 'visible' }}"/>
	<ActionItem tap="onSave" ios.systemIcon="3" android.systemIcon="ic_menu_save" ios.position="right"
		visibility="{{ isEditing ? 'visible' : 'collapse' }}"/>
	<ActionItem tap="onCancel"  ios.systemIcon="1" android.systemIcon="ic_menu_close_clear_cancel"
		visibility="{{ isEditing ? 'visible' : 'collapse' }}"/>
</ActionBar>
var observable = require("tns-core-modules/data/observable");
function onLoaded(args) {
	var page = args.object;
	page.bindingContext = new observable.Observable();
	page.bindingContext.set("isEditing", false);
}
exports.onLoaded = onLoaded;
function onEdit(args) {
	console.log("Edit item tapped.");
	var btn = args.object;
	btn.bindingContext.set("isEditing", true);
}
exports.onEdit = onEdit;
function onSave(args) {
	console.log("Save item tapped.");
	var btn = args.object;
	btn.bindingContext.set("isEditing", false);
}
exports.onSave = onSave;
function onCancel(args) {
	console.log("Cancel item tapped.");
	var btn = args.object;
	btn.bindingContext.set("isEditing", false);
}
exports.onCancel = onCancel;
import { EventData, Observable } from "tns-core-modules/data/observable";
import { View } from "tns-core-modules/ui/core/view";

export function onLoaded(args: EventData) {
	let page = <View>args.object;
	page.bindingContext = new Observable();
	page.bindingContext.set("isEditing", false);
}

export function onEdit(args: observable.EventData) {
	console.log("Edit item tapped.");
	let btn = <view.View>args.object;
	btn.bindingContext.set("isEditing", true);
}

export function onSave(args: observable.EventData) {
	console.log("Save item tapped.");
	let btn = <view.View>args.object;
	btn.bindingContext.set("isEditing", false);
}

export function onCancel(args: observable.EventData) {
	console.log("Cancel item tapped.");
	let btn = <view.View>args.object;
	btn.bindingContext.set("isEditing", false);
}

結果は次のとおりです。

action-items-visibility-ios action-items-visibility-android

スタイリング

ActionBarには、CSSスタイルの制限がいくつかあります。使用できるプロパティは、background-colorcolorのみです。以下に例を示します。

<ActionBar title="ActionBar Style">
	<NavigationButton text="Go Back" android.systemIcon="ic_menu_back"></NavigationButton>
	<ActionItem ios.systemIcon="2" android.systemIcon="ic_menu_edit" ios.position="right"></ActionItem>
</ActionBar>
ActionBar {
	background-color:  #3C5AFD;
	color: white;
}

結果は次のとおりです。

style-ios style-android

iOSでは、colorプロパティはタイトルとアクションアイテムの色に影響します。 Androidでは、colorプロパティはタイトルテキストのみに影響します。 ただし、Androidテーマ(App_Resources\Android\values\styles.xml 内)にactionMenuTextColorAndroidアイテムを追加することにより、 アクションアイテムのテキストのデフォルトの色を設定できます。

注釈: 他のCSSプロパティ(例:font-family)の設定は、titleViewで定義されたビューにのみ影響します。

SideDrawerボタンの作成

この例は、「サイドドロワーボタンを表示する」機能を実装する方法を示しています。

Androidの場合、この例ではNavigationButtonを使用します。 理由はActionItemsがActionBarの右側に表示されるためです。

iOSの場合、このコードは、位置が左に設定された通常のActionItemを追加します。 iOSでNavigationButtonをサイドドロワーボタンとして使用することはできません。 この機能は、常にアプリケーション内で「戻る」として機能します。

注釈: <android>および<ios>タグは、プラットフォーム固有の要素を定義するためにXML内で使用されます。
重要: プラットフォーム固有のタグ(<android>および<ios>)は、Angularベースでないプロジェクトでのみ機能します。

<ActionBar title="SideDrawer Button">
	<android>
		<NavigationButton icon="res://ic_menu" tap="showSideDrawer" />
	</android>
	<ios>
		<ActionItem icon="res://ic_menu" ios.position="left" tap="showSideDrawer" />
	</ios>
</ActionBar>
function showSideDrawer(args) {
	console.log("Show SideDrawer tapped.");
	// Show sidedrawer ...
}
exports.showSideDrawer = showSideDrawer;
export function showSideDrawer(args: observable.EventData) {
	console.log("Show SideDrawer tapped.");
	// Show sidedrawer ...
}
ActionBar {
	background-color:  #3C5AFD;
	color: white;
}

結果は次のとおりです。

side-drawer-ios side-drawer-android

入門

コアコンセプト

ユーザーインターフェース

ツール

ハードウェアアクセス

プラグインの開発

リリース

アプリテンプレート

パフォーマンスの最適化

フレームワークモジュール

ガイド

サポートを受ける

トラブルシューティング

Siedkick