查看隐藏在导航栏后面android
问题描述:
我使用Sliding Activity, View不适合屏幕,它隐藏在导航栏后面。查看隐藏在导航栏后面android
我试过,
<item name="android:fitsSystemWindows">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
但没有任何工程。
答
嘿最佳实践的研究是使用THA NavigationDrawer
,但对于你的问题创建一个类CustomSlidingMenu
延伸SlidingMenu
和覆盖方法是这样的。然后使用CustomSlidingMenu
,而不是SlidingMenu
,它应该正常工作
public class CustomSlidingMenu extends SlidingMenu {
private boolean mActionbarOverlay = false;
public CustomSlidingMenu(Context context) {
super(context);
}
public CustomSlidingMenu(Activity activity, int slideStyle) {
super(activity, slideStyle);
}
public CustomSlidingMenu(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomSlidingMenu(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@SuppressLint("NewApi")
@Override
protected boolean fitSystemWindows(Rect insets) {
if (mActionbarOverlay) return true;
setMyPadding(insets);
return true;
}
@TargetApi(Build.VERSION_CODES.KITKAT_WATCH)
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
if (mActionbarOverlay) return insets.consumeSystemWindowInsets();
Rect rect = new Rect(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom()
);
setMyPadding(rect);
return insets.consumeSystemWindowInsets();
}
private void setMyPadding(Rect rect) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WindowManager manager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
switch (manager.getDefaultDisplay().getRotation()) {
case Surface.ROTATION_90:
case Surface.ROTATION_270:
rect.right += getNavBarWidth();
break;
case Surface.ROTATION_180:
rect.top += getNavBarHeight();
break;
default:
rect.bottom += getNavBarHeight();
}
}
setPadding(
rect.left, rect.top, rect.right, rect.bottom
);
}
private int getNavBarWidth() {
return getNavBarDimen("navigation_bar_width");
}
private int getNavBarHeight() {
return getNavBarDimen("navigation_bar_height");
}
private int getNavBarDimen(String resourceString) {
Resources r = getResources();
int id = r.getIdentifier(resourceString, "dimen", "android");
if (id > 0) {
return r.getDimensionPixelSize(id);
} else {
return 0;
}
}
}
我假设你使用AppCompat
用我的方法,那么原因是由SlidingMenu
设置的垫衬有冲突与AppCompat
配置和覆盖他们。
请发布您的XML。 –