Scroll the screen up when keyboard appears

64,669

Solution 1

use android:windowSoftInputMode="adjustPan"

"adjustResize"

The activity's main window is always resized to make room for the soft keyboard on screen.

"adjustPan"

The activity's main window is not resized to make room for the soft keyboard. Rather, the contents of the window are automatically panned so that the current focus is never obscured by the keyboard and users can always see what they are typing. This is generally less desirable than resizing, because the user may need to close the soft keyboard to get at and interact with obscured parts of the window.

For example inn your manifest file:-

       <activity
    android:windowSoftInputMode="adjustPan"
    android:name=".MainActivity"></activity>

Late answer.But surely it helps anyone.

Solution 2

I had a similar problem once, I resolved using:

    android:windowSoftInputMode="adjustResize"

in the AndroidManifest.xml.

If you use a RelativeLayout start with the bottom element that must be hooked to the parent bottom and then hook the other element above the previous.

If you use LinearLayout wrap it in a RelativeLayout and hook the LinearLayout to parentBottom.

In this way when the keyboard pops up you will see the bottom of your layout.

Hope this helps.

Solution 3

I had a this problem , I resolved by this code :

myEdittext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    myscrollview.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            View lastChild = myscrollview.getChildAt(myscrollview.getChildCount() - 1);
                            int bottom = lastChild.getBottom() + myscrollview.getPaddingBottom();
                            int sy = myscrollview.getScrollY();
                            int sh = myscrollview.getHeight();
                            int delta = bottom - (sy + sh);
                            myscrollview.smoothScrollBy(0, delta);
                        }
                    }, 200);
                }
            });

Solution 4

This works: -

There is an issue with the scroll up when Keyboard opens up in Constraint Layout. Don't use that.

To achieve "Scroll the screen up when keyboard appears" Try this

Use Linear layout and ScrollView

and fill_parent in Scroll view. and any Text field in the scroll view.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:gravity="center">

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true">


</ScrollView>
</LinearLayout>

Solution 5

This works for me

android:windowSoftInputMode="stateVisible|adjustResize"

in androidmanifest for the activity

Share:
64,669
giangiska
Author by

giangiska

Updated on September 26, 2021

Comments

  • giangiska
    giangiska over 2 years

    I have an activity with an editText in the middle. When I click on the editText the keyboard appears, and the screen moves so that the editText is just above the keyboard, covering the other stuff that is below.

    I don't want to resize or add padding to the layout. I need that the screen scrolls to the top the amount of space that I need to see also the other stuff below. In other words, I'd like to select the position of the editText when the keyboard appears. It would be enough also if the screen scrolls up completely, showing me the bottom of the layout.

    I tried to put the layout in a scrollView adding this code on the editText

        editText.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                //make the view scroll down to the bottom
                scrollView.scrollTo(0, scrollView.getBottom());
    
            }
        });
    

    but it doesn't work. Does anyone have an idea? Thank you in advance!