我不确定我是如何得到这个的,也找不到类似的东西,但是我的软件导航和状态栏被绘制在我的布局上,而不是我的布局适合它们之间。
如何让我的布局在它们之间而不是在它们之间绘制?
编辑:
看来这是罪魁祸首,位于样式中:
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
我不确定我是如何得到这个的,也找不到类似的东西,但是我的软件导航和状态栏被绘制在我的布局上,而不是我的布局适合它们之间。
如何让我的布局在它们之间而不是在它们之间绘制?
编辑:
看来这是罪魁祸首,位于样式中:
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
解决这个问题:
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>
或者干脆删除它们。这些属性使您的 StatusBar 和 NavigationBar 半透明,这就是为什么您的布局就像全屏一样。
使用它来获取 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();