Нижний TabLayout оставляет место внизу

Я столкнулся с проблемой. У меня есть собственный макет для панели инструментов, и в моем xml-файле активности я включаю эту панель инструментов. Структура моей деятельности:

  1. Макет панели инструментов сверху с использованием тега include.
  2. ViewPager
  3. TabLayout внизу, чтобы получить нижние вкладки.

Проблема, с которой я столкнулся, заключается в том, что на некоторых устройствах все выглядит идеально, но на нескольких устройствах (протестировано на устройствах серии moto G) нижняя вкладка оставляет место.

Пожалуйста, обратитесь к изображениям ниже:

В обычных телефонах, когда отображается ожидаемый пользовательский интерфейс

введите здесь описание изображения

В серии MOTO G

введите здесь описание изображения

Код xml следующий

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#efeded"
android:weightSum="11"
android:orientation="vertical">

<include layout="@layout/custom_tool_bar" />

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"

    android:layout_height="0dp"

    android:layout_weight="10" />

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    style="@style/BottomTabLayout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:background="#fff"
    android:layout_weight="1"
    app:tabIndicatorColor="@color/colorPrimaryDark"
    app:tabSelectedTextColor="@color/colorPrimaryDark"
    />

</LinearLayout>

person The Bat    schedule 06.12.2017    source источник
comment
Возможный дубликат Как установить Android TabLayout в внизу экрана?   -  person denvercoder9    schedule 06.12.2017


Ответы (3)


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

https://developer.android.com/reference/android/support/design/widget/BottomNavigationView.html

person Nimisha V    schedule 06.12.2017

  1. удалите атрибут android:weightSum=11 в родительском LinearLayout;
  2. изменить атрибут android:layout_weight=10 ViewPager на android:layout_weight=1;
  3. удалить атрибут android:layout_weight=1 TabLayout

и попробуй еще раз.

person Anthonyeef    schedule 06.12.2017
comment
Похоже на идеальный ответ. - person IntelliJ Amiya; 06.12.2017
comment
Я сделал, но это не помогло. все равно остается место внизу - person The Bat; 07.12.2017
comment
@TheBat Звучит странно. У вас есть другое устройство для тестирования? Это происходит только с Moto G? Также я заметил, что на втором скриншоте нет программной кнопки навигации, это как-то связано с вашей проблемой? - person Anthonyeef; 07.12.2017
comment
@IntelliJAmiya Я написал ответ, пожалуйста, посмотрите. - person The Bat; 08.12.2017
comment
@Anthonyeef Я написал ответ, пожалуйста, посмотрите. - person The Bat; 08.12.2017
comment
@TheBat, насколько я понимаю, причина появления дополнительных отступов - это метод переопределения, который вы кодируете, чтобы определить, существует или нет системная программная клавиша navigationBar. Это не имеет ничего общего с макетом xml, который вы публиковали ранее (и я думаю, что макет xml действительно будет работать без этого метода обнаружения программной клавиши навигации). Возможно, вам следует попытаться задать новый вопрос об этом, хотя я уже видел подобный вопрос раньше, и на самом деле он, похоже, отличается от устройства к устройству, а также от разных ПЗУ. - person Anthonyeef; 10.12.2017

Я нашел проблему, почему это происходит. Я использовал библиотеку - ResideMenu в своей деятельности, и у нее есть функция для определения наличия аппаратного обеспечения устройства. Кнопки Назад и Меню или цифровые.

@Override
protected boolean fitSystemWindows(Rect insets) {

    int bottomPadding = viewActivity.getPaddingBottom() + insets.bottom;
    boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
    boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);

    if (!hasBackKey || !hasHomeKey) {//there's a navigation bar
        bottomPadding += getNavigationBarHeight();
    }

    this.setPadding(viewActivity.getPaddingLeft() + insets.left,
            viewActivity.getPaddingTop() + insets.top,
            viewActivity.getPaddingRight() + insets.right,
            bottomPadding);
    insets.left = insets.top = insets.right = insets.bottom = 0;
    return true;
}

Это не работает должным образом. Для некоторых устройств работает нормально, но для некоторых устройств не может определить кнопки. Поэтому в некоторых устройствах он поднимается, оставляя место для цифровых кнопок. В любом случае, я не смог найти решение для этого, попробовал несколько StackOverflow, но это не сработало, напишите, если кто-то что-то найдет.

person The Bat    schedule 08.12.2017