隐藏在导航栏android后面的视图

时间:2016-06-08 06:17:16

标签: android android-view navigationbar

我正在使用滑动活动, 视图不适合屏幕,它隐藏在导航栏后面。

我试过了,

<item name="android:fitsSystemWindows">true</item> 
<item name="android:windowDrawsSystemBarBackgrounds">false</item>

但没有任何作用。

这里Snackbar隐藏在导航栏后面: enter image description here

1 个答案:

答案 0 :(得分:0)

嘿,最好的方法是使用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配置和覆盖冲突他们。