Android中的导航栏:大小和位置

时间:2012-08-25 10:26:02

标签: android navigationbar

我目前正在开发适用于Android的OpenGL应用。到目前为止一切正常,但导航栏有点令人不安......

有没有办法确定导航栏是否位于右侧,就像在我的星系连接处,如果是在风景中,或者它是在平板电脑的底部。 另外我需要导航栏的高度和宽度。

有谁知道如何实现这个目标?

由于

3 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法:

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size); 
    width = size.x;
    height = size.y;

在这部分代码之后,宽度和高度包含高度和宽度,没有导航栏或通知栏。

答案 1 :(得分:1)

我是这样做的:

boolean hasMenuKey = ViewConfiguration.get(getApplicationContext())
                .hasPermanentMenuKey();

//如果没有菜单键,则有导航栏

if (!hasMenuKey && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
         DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);

            if (dm.heightPixels%10!=0) {
            //navigation bar is on bottom
            } else {
               //navigation bar is on right side
            }

        }

答案 2 :(得分:0)

在这里发布内容是为了使那些最终在这里找到可以优雅地处理Navigationbar和Statusbar的人的人。

引用this post

正如许多类似问题(例如thisthisthisthis中所建议的那样,仅获取导航栏的高度可能还不够。我们需要考虑是否 1。导航栏存在; 2。在底部还是向右或向左; 3。在多窗口模式下打开的应用程序。

有一个简单的单行解决方案

android:fitsSystemWindows="true"

或以编程方式

findViewById(R.id.your_root_view).setFitsSystemWindows(true);

您还可以通过

获得根视图
findViewById(android.R.id.content).getRootView();
or
getWindow().getDecorView().findViewById(android.R.id.content)

有关获取根视图的更多详细信息,请参考-https://stackoverflow.com/a/4488149/9640177