アプリケーション作成時に「NavigationBarが表示されている端末かどうか?」の判定が必要となった場合、どうすればいいか確認します。
以下のモジュールがFrameworks内にあります
PhoneWindowManager#hasNavigationBar()
WindoManagerService#hasNavigationBar()
このモジュールを使用しているソースがあるかどうかチェック。
アプリケーションで使えそうなモジュールはViewConfigurationというクラス。
hasPermanentMenuKey()というmethodは
Permanentな(常に押下できる)MenuKeyは存在する/しないか判定するmethod。
sHasPermanentMenuKeyは以下の条件で値が決定する。
wm.canStatusBarHide()は「Phone/Tabletの判定」、wm.hasNavigationBar()は「NavigationBarの有無判定」なので、
と、いうことでアプリ側で以下のように値を取得すればOK。
関連リンク:
何気なく使っているFrameworks 第10回 NavigationBar / ナビゲーションバー
EmulatorでNavigationBarを表示する
以下のモジュールがFrameworks内にあります
PhoneWindowManager#hasNavigationBar()
WindoManagerService#hasNavigationBar()
このモジュールを使用しているソースがあるかどうかチェック。
アプリケーションで使えそうなモジュールはViewConfigurationというクラス。
public class ViewConfiguration {
private ViewConfiguration(Context context) {
:
if (!sHasPermanentMenuKeySet) {
IWindowManager wm = Display.getWindowManager();
try {
sHasPermanentMenuKey = wm.canStatusBarHide() && !wm.hasNavigationBar();
sHasPermanentMenuKeySet = true;
} catch (RemoteException ex) {
sHasPermanentMenuKey = false;
}
}
:
}
public boolean hasPermanentMenuKey() {
return sHasPermanentMenuKey;
}
}
hasPermanentMenuKey()というmethodは
Permanentな(常に押下できる)MenuKeyは存在する/しないか判定するmethod。
sHasPermanentMenuKeyは以下の条件で値が決定する。
wm.canStatusBarHide()は「Phone/Tabletの判定」、wm.hasNavigationBar()は「NavigationBarの有無判定」なので、
Tabletも場合、そのそもNavigationBarは非対応なので、falseとなる。となる。
Phone ModeでかつNavigationBarがない場合、trueとなる。
Phone ModeでかつNavigationBarがある場合、falseとなる。
と、いうことでアプリ側で以下のように値を取得すればOK。
//hasPermanentMenuKey == true はNavigationBarが非表示 //hasPermanentMenuKey == false はNavigationBarが表示 boolean isNavigationBar = ! ViewConfiguration.get(this).hasPermanentMenuKey();
関連リンク:
何気なく使っているFrameworks 第10回 NavigationBar / ナビゲーションバー
EmulatorでNavigationBarを表示する
0 件のコメント:
コメントを投稿