ChatGPT解决这个技术问题 Extra ChatGPT

Page scroll when soft keyboard popped up

I have a <ScrollView> layout:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

As you see above, the simple layout consists of three input fields and an "Ok" button.

I run my app with the above layout, when I tap on the 1st input field (@+id/input_one), the soft keyboard will pop up from the bottom of the screen, it hides the 3rd input field and the "Ok" button.

Since I use <ScrollView> , I thought I can scroll the page up in order to see the 3rd input field and "Ok" button which are hidden by the soft keyboard, but the page is not scrollable. Why? How to get rid of it? basically, i would like to see every input fields and "Ok" button even the soft keyboard popped up.

remove the , LinearLayout should be your outer layout, it will work, i hope even if the sofkeyboard pop up .
@pakshaheen That won't fix the problem when scrollview is required.
here is the working code. stackoverflow.com/questions/7417123/…

S
Saharsh

I fixed the problem by defining the following attribute in <activity> of AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

You don't need stateVisible. That will make the soft keyboard appear when the app is launched even when the user is not focused on a EditText
it's autometically open keyboard even there is not edittext
C
Community

Ok, I have searched several hours now to find the problem, and I found it.

None of the changes like fillViewport="true" or android:windowSoftInputMode="adjustResize" helped me.

I use Android 4.4 and this is the big mistake:

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

Somehow, the Fullscreen themes prevent the ScrollViews from scrolling when the SoftKeyboard is visible.

At the moment, I ended up using this instead:

android:theme="@android:style/Theme.Black.NoTitleBar

I don't know how to get rid of the top system bar with time and battery display, but at least I got the problem.

Hope this helps others who have the same problem.

EDIT: I got a little workaround for my case, so I posted it here:

I am not sure if this will work for you, but it will definitely help you in understanding, and clear some things up.

EDIT2: Here is another good topic that will help you to go in the right direction or even solve your problem.


+1 In my case the status bar was hidden by a 3rd party lib in code: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
@qweret What if I need both of them? Full screen and scrolling.
@Prabs Did you find any solution? I also want both Full Screen and scrolling.
@Johny Nope. For now I'm using full screen for entire app except that activity with scrolling3.
@Prabs The only solution I thought is have transparent status bar but in my case is stil an issue because I want to support API >= 16 . Do you have any idea?
J
Jachumbelechao Unto Mantekilla

For me the only thing that works is put in the activity in the manifest this atribute:

android:windowSoftInputMode="stateHidden|adjustPan"

To not show the keyboard when opening the activity and don't overlap the bottom of the view.


A
Alex Karshin

put this inside your Manifest like this in No fullscreen Mode

android:windowSoftInputMode="stateVisible|adjustPan" 

in your manifest

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

I've tried this but unfrotunately, no luck at all... However, the root view is not a ScrollView, but a RelativeLayout which contains a LinearLayout which then contains a ScrollView
V
Vadim Kotov

In your Manifest define windowSoftInputMode property:

<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustNothing">

@JacobRas please check this link : developer.android.com/reference/android/… it has the value "adjustNothing" :)
I have the same trouble, but scrollview doesn't work with adjustNothing :(
A
Alp Altunel

check out this.

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>

b
blueware

This only worked for me:

android:windowSoftInputMode="adjustPan"

G
Grant Miller

You can try using the following code to solve your problem:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

You should bother explaining what your code does instead of just posting a dry piece code as an answer.
u
ucMedia

Also if you want to do that programmatically just add the below line to the onCreate of the activity.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );

S
Saeed Zhiany

well, the simplest answer I tried is just removing your code which makes the activity go full screen. I had a code like this which was responsible for making my activity go fullscreen :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    );
}

I just removed my code and it works completely fine although if you want to achieve this with your fullscreen on then you'll have to try some other methods


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now