_ NativeScriptで画面の転回に合わせてTabViewの表示を切り替える
NativescriptでTabViewを消したり表示したりする方法です。
例えば動画再生や画像表示をフルスクリーンで行う場合、TabViewのタブを消したい場合があります。
ここでは、デバイスの向き(縦、横)によってTabViewの表示・非表示を切り替えます。
回転検出は nativescript-orientation というプラグインを使います。
1
| require("nativescript-orientation");
|
1
2
3
4
5
6
7
8
| /**
* 画面転回検出
* @param {*} args
*/
function orientation(args){
:
}
exports.orientation = orientation;
|
という感じで、イベントが取れます。
TabViewの表示・非表示は以下のように制御します(iOSは未確認)。
■非表示
1
2
| const application = require("tns-core-modules/application");
const Frame = require('tns-core-modules/ui/frame');
|
1
2
3
4
5
6
7
8
| const myFrame = Frame.getFrameById("myFrame");
const tabview = myFrame.getViewById("myTabView");
if (application.android) {
tabview.android.getChildAt(1).setVisibility(android.view.View.GONE);
}
if(application.ios){
tabview.ios.tabBar.hidden = true;
}
|
■表示
1
| tabview.android.getChildAt(1).setVisibility(android.view.View.VISIBLE);
|
これを、画面の縦・横に応じて実行してあげればOKです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| /**
* 画面転回検出
* @param {*} args
*/
function orientation(args){
console.log('orientation changed to '+(args.landscape ? 'landscape' : 'portrait'));
if(args.landscape){
const myFrame = Frame.getFrameById("myFrame");
const tabview = myFrame.getViewById("myTabView");
if (application.android) {
tabview.android.getChildAt(1).setVisibility(android.view.View.GONE);
}
if(application.ios){
tabview.ios.tabBar.hidden = true;
}
} else {
const myFrame = Frame.getFrameById("myFrame");
const tabview = myFrame.getViewById("myTabView");
if (application.android) {
tabview.android.getChildAt(1).setVisibility(android.view.View.VISIBLE);
}
if(application.ios){
tabview.ios.tabBar.hidden = false;
}
}
}
exports.orientation = orientation;
|
ちなみに、getChildAt(1)の1が何故1なのかは不明です(^^;)。0を指定するとTabViewの内容が消えるので、何かがそういう順番で格納されていると思われます。期待した動作をしない場合は、ご自分の環境に合わせて変えてみてください。