布局位于StatusBar和Soft Keys下

时间:2015-08-20 21:12:22

标签: android android-layout navigationbar translucency android-statusbar

我不知道我是怎么做到的,我找不到类似的东西,但是我的软件导航和状态栏正在我的布局上绘制,而不是我的布局适合它们。

如何让我的布局在它们之间绘制而不是在?

之下

Example

修改

这似乎是罪魁祸首,位于风格中:

    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>

2 个答案:

答案 0 :(得分:6)

解决这个问题:

<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>

或简单地删除它们。这些属性使您的StatusBar和NavigationBar半透明,这就是为什么您的布局就像一个全屏幕。

答案 1 :(得分:0)

使用它来获取RootView的页边距底部,并且导航不重叠

public static int getSoftButtonsBarSizePort(Activity activity) {
// getRealMetrics is only available with API 17 and +
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    DisplayMetrics metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int usableHeight = metrics.heightPixels;
    activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
    int realHeight = metrics.heightPixels;
    if (realHeight > usableHeight)
        return realHeight - usableHeight;
    else
        return 0;
}
return 0;
}

和OnCreate方法

var rootView = ((ViewGroup)this.FindViewById(Android.Resource.Id.Content)).GetChildAt(0);
        //var rootView = this.Window.DecorView.RootView;

        ViewGroup.MarginLayoutParams layoutParams;

        if (rootView.LayoutParameters != null)
        {
            layoutParams = (ViewGroup.MarginLayoutParams)rootView.LayoutParameters;

        }
        else
        {
            layoutParams = new ViewGroup.MarginLayoutParams(rootView.Width, rootView.Height);
        }


        var margin = GetSoftButtonsBarSizePort(this);

        layoutParams.SetMargins(rootView.Left, rootView.Top, rootView.Right, margin);
        rootView.LayoutParameters = layoutParams;
        rootView.RequestLayout();