アプリケーション作成時に「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 件のコメント:
コメントを投稿