Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bottom Navigation bar moves up with keyboard

I am using scroll view in a fragment but the screen does not scroll up when the keyboard is shown as it should be. Here is the scenario: I have mainActivity which has bottom navigation bar plus a frame layout which works as container for the activity. Here is the code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity"
    >
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />

    <android.support.design.widget.BottomNavigationView
        android:background="@color/clear_white"
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentBottom="true"
        app:itemIconTint="@color/blue_navbar_icon"
        app:itemTextColor="@color/blue_navbar_icon"
        app:menu="@menu/navigation" />
</RelativeLayout>

Fragment screen has some input fields plus buttons which wrapped in constrained layout and then constrained layout is wrapped in scrollView, so that it can be scrolled up when the keyboard is active. Here is code of fragment xml file:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        >
        <include
            android:id="@+id/app_bar_new"
            layout="@layout/app_bar_new"
            app:layout_constraintBottom_toTopOf="@+id/btn_get_location"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/btn_get_location"
            style="@style/btn_style"
            android:layout_width="match_parent"
            android:layout_height="43dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="12dp"
            android:text="@string/get_location_btn_str"
            app:layout_constraintBottom_toTopOf="@+id/tv_long"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/app_bar_new" />

        <EditText
            android:id="@+id/et_name_of_attr"
            style="@style/input_field_style"
            android:layout_width="0dp"
            android:layout_height="47dp"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:background="@drawable/input_field_design"
            android:ems="10"
            android:hint="@string/loc_name"
            android:inputType="textPersonName"
            app:layout_constraintBottom_toTopOf="@+id/et_description"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/tv_long" />

        <Button
            android:id="@+id/btn_save"
            style="@style/btn_style"
            android:layout_width="90dp"
            android:layout_height="42dp"
            android:layout_marginBottom="25dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="7dp"
            android:padding="10dp"
            android:text="@string/btn_save"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/rg_access" />

        <EditText
            android:id="@+id/et_cam_img_title"
            style="@style/input_field_style"
            android:layout_width="0dp"
            android:layout_height="47dp"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:ems="10"
            android:hint="@string/loc_img_title"
            android:inputType="textMultiLine"
            app:layout_constraintBottom_toTopOf="@+id/additional_imgs"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_description" />

        <EditText
            android:id="@+id/et_description"
            style="@style/input_field_style"
            android:layout_width="0dp"
            android:layout_height="47dp"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:ems="10"
            android:hint="@string/loc_desc"
            android:inputType="textMultiLine"
            app:layout_constraintBottom_toTopOf="@+id/et_cam_img_title"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_name_of_attr" />

        <TextView
            android:id="@+id/tv_long"
            android:layout_width="170dp"
            android:layout_height="35dp"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/long_lat_bg"
            android:ems="10"
            android:inputType="numberDecimal"
            android:padding="5dp"
            android:text="@string/loc_long"
            app:layout_constraintBottom_toTopOf="@+id/location_name_text"
            app:layout_constraintEnd_toStartOf="@+id/tv_lat"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btn_get_location" />

        <TextView
            android:id="@+id/tv_lat"
            android:layout_width="170dp"
            android:layout_height="35dp"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/long_lat_bg"
            android:ems="10"
            android:inputType="textPersonName"
            android:padding="5dp"
            android:text="@string/loc_lat"
            app:layout_constraintBottom_toTopOf="@+id/location_name_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/tv_long"
            app:layout_constraintTop_toBottomOf="@+id/btn_get_location" />

        <RelativeLayout
            android:id="@+id/additional_imgs"
            style="@style/input_field_style"
            android:layout_width="0dp"
            android:layout_height="47dp"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:orientation="horizontal"
            app:layout_constraintBottom_toTopOf="@+id/relativeLayout2"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_cam_img_title">

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:layout_marginStart="13dp"
                android:layout_weight="1"
                android:text="@string/loc_additional_imgs"
                android:layout_alignParentLeft="true"
                android:layout_marginLeft="13dp" />

            <ImageView
                android:id="@+id/btn_add_imgs"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:src="@drawable/ic_action_add_blue" />

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/relativeLayout2"
            style="@style/input_field_style"
            android:layout_width="0dp"
            android:layout_height="47dp"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="11dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="11dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:orientation="horizontal"
            app:layout_constraintBottom_toTopOf="@+id/rg_access"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/additional_imgs">


            <ImageView
                android:id="@+id/icon_drop_down_img"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:src="@drawable/ic_drop_down" />

            <Spinner
                android:id="@+id/spin_classification"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent" />
        </RelativeLayout>


        <TextView
            android:textSize="16sp"
            android:textColor="@color/blue"
            android:id="@+id/tv_desc_access"
            android:layout_width="wrap_content"
            android:layout_height="32dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="11dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="11dp"
            android:layout_marginTop="7dp"
            android:text="@string/loc_acess"
            app:layout_constraintBottom_toTopOf="@+id/btn_save"
            app:layout_constraintEnd_toStartOf="@+id/rg_access"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/relativeLayout2" />

        <RadioGroup
            android:id="@+id/rg_access"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="7dp"
            android:layout_marginEnd="21dp"
            android:layout_marginRight="21dp"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:orientation="horizontal"
            app:layout_constraintBottom_toTopOf="@+id/btn_save"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/relativeLayout2">

            <RadioButton
                android:id="@+id/rb_car"
                android:background="@drawable/rb_car"
                android:button="@android:color/transparent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <RadioButton
                android:id="@+id/rb_jeep"
                android:background="@drawable/rb_jeep"
                android:button="@android:color/transparent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <RadioButton
                android:id="@+id/rb_track"
                android:background="@drawable/rb_hike"
                android:button="@android:color/transparent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="10dp"/>
        </RadioGroup>
    </android.support.constraint.ConstraintLayout>
</ScrollView>

Also here is my manifest file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.eapple.tripdatacollection">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity"
            android:windowSoftInputMode="adjustResize"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ViewSavedLocations" />
        <activity android:name=".fireBaseUpdates" />
        <activity android:name=".SignInActivity" />
        <activity android:name=".ForgotPasswordActivity" />
        <activity android:name=".UploadDataActivity" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main2" />
    </application>
</manifest>

But it does not work as it is intended to be. 1) The bottom navigation bar goes up with the keyboard as shown here:Screenshot

I want the bottom navBar to stay at bottom or get disappeared when keyboard is active.

like image 720
Haroon khan Avatar asked Sep 18 '18 17:09

Haroon khan


People also ask

How do you keep a bottom nav bar from being pushed up on keyboard?

Try removing this: android:windowSoftInputMode="adjustResize" from AndroidManifest. xml This should help. You have 3 options for what to do when the keyboard shows- scroll the app such that the cursor is onscreen, resize the app in the remaining space, or nothing. Number 2 is probably the closest to what you want.

How do you turn off the behavior bottom navigation bar goes up with keyboard in flutter?

I just came across the same problem where my bottomNavbar is moving up with the keyboard when the keyboard is enabled. I solved it by checking if the keyboard is open or not. If it is open, just hide the disable the bottomNavbar and when it is closed, it's time to enable the navbar..

How do I turn off the bottom navigation bar?

In the SureLock Settings screen, navigate to Miscellaneous Settings. Check Use Advance Hide Bottom Bar option to enable it. Once done, the bottom bar on the device will be hidden.

What is that navigation bar at the bottom called?

A bottom app bar displays navigation and key actions at the bottom of mobile screens.


2 Answers

In my case it was enough only to add android:windowSoftInputMode="adjustPan" to my AndroidManifest file as follows:

 <activity android:name=".view.MainActivity"
            android:windowSoftInputMode="adjustPan"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>
like image 151
Ivan Avatar answered Oct 19 '22 05:10

Ivan


Here is the solution, how I resolved the issue using this api: https://github.com/yshrsmz/KeyboardVisibilityEvent.

Steps:

1) In your androidManifest file:

Add the following tag: android:windowSoftInputMode="adjustResize"

As I did here:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.eapple.tripdatacollection">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity"
            android:windowSoftInputMode="adjustResize"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ViewSavedLocations" />
        <activity android:name=".fireBaseUpdates" />
        <activity android:name=".SignInActivity" />
        <activity android:name=".ForgotPasswordActivity" />
        <activity android:name=".UploadDataActivity" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main2" />

    </application>

</manifest>

2) Add the following dependency in your build.grade file (App)

dependencies { implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0' }

3) Add the following code to your activity onCreate method:

KeyboardVisibilityEvent.setEventListener(
        getActivity(),
        new KeyboardVisibilityEventListener() {
            @Override
            public void onVisibilityChanged(boolean isOpen) {
                // some code depending on keyboard visiblity status
            }
        });

Here is my Java file:

package com.example.eapple.tripdatacollection;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;

import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent;
import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEventListener;

public class Main2Activity extends AppCompatActivity {

    private static AddLocationFragment addLocationFragment;
    private static ProfileFragment profileFragment;
    private static SavedLocationsFragment savedLocationsFragment;
    private View rootView;
    private final String TAG = "Main2Activity";

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_profile:
                    loadFragment(profileFragment);
                    return true;
                case R.id.navigation_saved_locations:
                    loadFragment(savedLocationsFragment);
                    return true;
                case R.id.navigation_add_location:
                    loadFragment(addLocationFragment);
                    return true;
            }
            return false;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        addLocationFragment = new AddLocationFragment();
        savedLocationsFragment = new SavedLocationsFragment();
        profileFragment = new ProfileFragment();

        rootView = findViewById(R.id.root_view);

        final BottomNavigationView navigation = findViewById(R.id.navBar);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        navigation.setSelectedItemId(R.id.navigation_add_location);
        loadFragment(addLocationFragment);

        KeyboardVisibilityEvent.setEventListener(
                this,
                new KeyboardVisibilityEventListener() {
                    @Override
                    public void onVisibilityChanged(boolean isOpen) {
                        Log.d(TAG,"onVisibilityChanged: Keyboard visibility changed");
                        if(isOpen){
                            Log.d(TAG, "onVisibilityChanged: Keyboard is open");
                            navigation.setVisibility(View.INVISIBLE);
                            Log.d(TAG, "onVisibilityChanged: NavBar got Invisible");
                        }else{
                            Log.d(TAG, "onVisibilityChanged: Keyboard is closed");
                            navigation.setVisibility(View.VISIBLE);
                            Log.d(TAG, "onVisibilityChanged: NavBar got Visible");
                        }
                    }
                });
    }

    private void loadFragment(android.support.v4.app.Fragment fragment) {
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

}
like image 26
Haroon khan Avatar answered Oct 19 '22 06:10

Haroon khan