你可以看到我的"得到它"按钮在导航栏后面。无法修复它!我试过了
<item name="android:fitsSystemWindows">true</item>
以及在布局文件中设置它。
我在价值21中的主题是:
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:fitsSystemWindows">true</item>
</style>
与整个应用程序中的所有屏幕的情况相同。
请帮助。
答案 0 :(得分:32)
这是解决方案。
通过在value-21 style.xml
中添加这些属性,可以解决大多数布局问题<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:fitsSystemWindows">true</item>
对于其他人,我计算了导航栏的高度并为我的视图添加了边距。
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;
}
注意:通过使用上述解决方案一切正常,但我也在我的应用程序中使用PopupWindow.PopupWindow的布局搞砸了android L.查找问题和解决方案{{ 3}}
答案 1 :(得分:5)
为了获得良好的用户体验,您不需要使用android:windowTranslucentNavigation
相反,这是更好的解决方案,如果您使用的是ResideMenu库,那么只需在ResideMenu.java中添加此方法
@Override
protected boolean fitSystemWindows(Rect insets) {
int bottomPadding = insets.bottom;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
bottomPadding += resources.getDimensionPixelSize(resourceId);
}
}
this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top,
viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + bottomPadding);
insets.left = insets.top = insets.right = insets.bottom = 0;
return true;
}
如果您使用的是SlidingMenu
库,请将mod更改为SLIDING_CONTENT
:
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
希望它能节省你的时间
答案 2 :(得分:3)
这很简单, 只需将此行添加到父布局xml:
android:fitsSystemWindows="true"
答案 3 :(得分:1)
在设置内容视图时,只需在Activity的onCreate()中设置它:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
<ImageView
android:id="@+id/measurement_image_view"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_alignParentLeft="true"
android:text="Left"
android:src="@drawable/starttest"
android:padding="10dp" />
<Button
android:text="@string/button_like"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button_like"
android:layout_marginBottom="26dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
答案 4 :(得分:1)
在Activity
的onCreate方法中使用此代码(如果您有BaseActivity
,则可以执行此操作,以便所有活动都适用于此):
ViewCompat.setOnApplyWindowInsetsListener(
findViewById(android.R.id.content), (v, insets) -> {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
params.bottomMargin = insets.getSystemWindowInsetBottom();
return insets.consumeSystemWindowInsets();
});
当布局具有此标志时,表示此布局要求系统应用窗口插入。在我们的情况下,这意味着,FrameLayout希望应用一个等于状态栏高度的填充。
答案 5 :(得分:1)
我在上面尝试了许多答案,但是没有一个对我有用。我已经包装了相对的布局,其中我的按钮(必须连接到底部)位于另一个线性布局中。它神奇地为我工作。
如果有人可以添加原因,那会更有帮助。
答案 6 :(得分:0)
将softInputMode
popupWindow
设置为SOFT_INPUT_ADJUST_RESIZE
即可解决问题。
答案 7 :(得分:0)
在您的java的setcontent视图之前尝试一下,此问题解决了我的问题
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);`
答案 8 :(得分:0)
在大多数情况下以及默认,导航栏应始终在应用下方,除非您已触发设置。
如果这是您想要的行为,请确保您没有运行此行:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);