Как избежать нажатия только BottomNavbar при появлении программной клавиатуры

У меня есть такое представление в моем приложении для Android

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

Есть mainActivity, у которого есть bottomNavBar, и есть фрагмент внутри активности, который имеет две кнопки внизу.

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

Если я установлю android:windowSoftInputMode="adjustResize" для mainActivity в файле manifest, тогда клавиатура поднимет нижний NavBar и кнопки.

Если я установлю android:windowSoftInputMode="adjustResize" только для фрагмента (программно), он все равно будет вести себя так же.

Как я могу это сделать? Любые предложения будут высоко оценены

Вот моя активность xml

    <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <LinearLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <fragment
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/mobile_navigation"
            android:layout_weight="@integer/int_two"/>

        <com.google.android.material.bottomnavigation.BottomNavigationView
            app:itemIconTint="@drawable/bottom_navigation_selector"
            app:itemTextColor="@drawable/bottom_navigation_selector"
            android:id="@+id/nav_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="@integer/int_zero"
            android:background="?android:attr/windowBackground"
            app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
            app:menu="@menu/bottom_nav_menu" />

    </LinearLayout>
</layout>

person Zohab Ali    schedule 04.02.2021    source источник
comment
Вы пробовали android:windowSoftInputMode=adjustPan|stateHidden ?   -  person memres    schedule 04.02.2021


Ответы (2)


Я также сталкиваюсь с той же проблемой, приложив много усилий, я нахожу решение, которое работает для меня. Что я делаю, когда появляется клавиатура, видимость нижней панели навигации ПРОШЛА strong> и наоборот.

Попробуйте это для получения событий клавиатуры open и closed -

view.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
      Rect r = new Rect();
      view.getWindowVisibleDisplayFrame(r);
      if (view.getRootView().getHeight() - (r.bottom - r.top) > 500) {
        // on Keyboard Open
        llBottomNavBarLayout.setVisibility(View.GONE);
      } else {
        // on keyboard close
        llBottomNavBarLayout.setVisibility(View.VISIBLE);
      }
    });

Для просмотра я использую

LayoutInflater layoutInflater = getLayoutInflater();
View view = layoutInflater.inflate(R.layout.activity_abc, null);
person Tanmay Ranjan    schedule 04.02.2021
comment
это сработало, спасибо, но не могли бы вы сказать мне, почему мы используем значение 500? - person Zohab Ali; 09.02.2021

Спасибо за обновления. Попробовал вашу схему. Добавьте в свой манифест соответствующее действие android:windowSoftInputMode="adjustNothing" Обратите внимание, что это также влияет на FAB и другие представления привязки.

<activity
   android:name=".activities.MainActivity"
   android:windowSoftInputMode="adjustNothing">
     <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>
person Blessing Charumbira    schedule 04.02.2021
comment
Я пытался, но это не сработало. Я обновил вопрос для вас. Вы можете увидеть код активности - person Zohab Ali; 04.02.2021