Подтвердить что ты не робот

Приложение с надстройкой для навигационной панели в Lollipop

В Android Lollipop (самый последний предварительный просмотр dev, build LPX13D) на моем Nexus 5 приложение, которое я пишу, похоже, скрыто под мягкой навигационной панелью (панель с кнопками Back, Home и App History). Я не могу дублировать это на Nexus 4, работающем Kit Kat (ничто не скрывается за навигационной панелью).

Что мне нужно сделать, чтобы уменьшить окно просмотра приложения, чтобы весь мой контент можно было увидеть на экране?

EDIT:

Скриншоты, по запросу.

Nexus 4 работает Kit Kat (4.4.4): enter image description here

Nexus 5 работает Lollipop (5.0, LPX13D): enter image description here

4b9b3361

Ответ 1

После тонны тестирования я обнаружил, что это проблема с библиотекой SlidingMenu. Я не смог его исправить, и я не смог найти причину, отличную от нее, включая возможность сползать панель действий.

Я опубликовал проблему с библиотекой GitHub, надеюсь, получить исправление к библиотеке или к решению.

https://github.com/jfeinstein10/SlidingMenu/issues/680

EDIT (2014-11-04):. В качестве быстрого обзора пользователь, опубликованный в вышеупомянутой проблеме, связан с темой Material, и что использование темы Holo позволит избежать этой проблемы, Я смог это подтвердить. Поэтому нам, вероятно, придется подождать исправления для SlidingMenu, прежде чем использовать его с темой Material.

Ответ 2

Попробуйте добавить android:fitsSystemWindows="true" к корневому представлению в вашем файле макета активности.

Ответ 3

Если у кого-то есть аналогичная проблема с android.support.v4 - просто обновите библиотеку поддержки до версии 22.2.1.

Ответ 4

Через много часов R & D здесь мы идем с решением

Если вы используете библиотеку 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;
}

Ответ 5

Простым решением, которое сейчас работает для меня, является, Получите высоту панели навигации и установите дополнение к корневому расположению активности в OnCreate() после setContentView.

.....
        int navHeight = getNavHeight();
        if (navHeight > 0) {
            (findViewById(R.id.rlMain)).setPadding(0, 0, 0, navHeight);
        }
.....
    private int getNavHeight() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
            return 0;
        try {

            Resources resources = getResources();
            int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
            if (resourceId > 0) {
                boolean hasMenuKey = ViewConfiguration.get(getApplicationContext()).hasPermanentMenuKey();
                boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);

                if (!hasMenuKey && !hasBackKey) {
                    return resources.getDimensionPixelSize(resourceId);
                }
            }
        } catch (Exception ex) {
            return 0;
        }
        return 0;
    }