10

In an Android webview, when a text/password field is touched, the keyboard appears but covers the field, forcing the user to scroll to see what they are typing.

Is there a way to solve this issue or a way to have an auto-focus in web view ? (as seen in iOS).

Manifest

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

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

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:windowSoftInputMode="adjustPan"
        android:theme="@style/AppTheme">
        <activity android:name=".SplashScreen" android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity">
        </activity>
    </application>

</manifest>

Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@color/splash_background"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/ambWebViewLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/splash_background" />

</LinearLayout>

I also paste styles and colors here:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>

    <color name="splash_background">#e11020</color>
</resources>

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">#e11020</item>
        <item name="colorPrimaryDark">#e11020</item>
        <item name="colorAccent">#e11020</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowTranslucentNavigation">true</item>

    </style>

    <!-- SplashTheme -->
    <style name="SplashTheme" parent="AppTheme">
        <item name="android:windowBackground">@drawable/splash_theme</item>
    </style>

</resources>
1

8 Answers 8

9
+25

Try adding the following property:

android:fitsSystemWindows="true"

in the root LinearLayout of the .xml layout.

Sign up to request clarification or add additional context in comments.

4 Comments

And navigation bar is colored too! 😕 I can't use android:fitsSystemWindows="true" as long as I don't understand how to make status bar and navigation bar transparent again 🤔
You can use a CoordinatorLayout as your activity root view and then setFitsSystemWindows(boolean) will work. You can check the following post for a detailed explaination. link @Stefano.
@Stefano Also you may try alternative solutions if you do not want to change your layout. They can be found in this answer here
unfortunately my app crashes with CoordinatorLayout instead of LinearLayout :-/
4

Android keyboard hides when the app use full screen mode.

This issue can be resolved if you use

<item name="android:windowFullscreen">false</item> in your styles.

then use <activity android:name=".MainActivity" android:windowSoftInputMode="adjustResize">

in your manifest.

1 Comment

great solution on fullscreen this was not working. but when I disable the fullscreen this works without need to change on manifest. thank you
1

You might want to check this article: https://developer.android.com/training/keyboard-input/visibility

Maybe this will help you.

android:windowSoftInputMode="adjustResize"

1 Comment

Hi, thank you very much for helping! I tried to insert it in the .MainActivity and unfortunately it doesn't work :-( the keyboard appears and covers the text field
1

I resolved this issue by following answers

android:fitsSystemWindows="true" in root LinearLayout @animeshk

<item name="android:windowFullscreen">false</item> in theme style @Nawin

In my case, it worked well without adding android:windowSoftInputMode="adjustResize"

Comments

0

You can try this following property:

  • In manifest file where you register your activity :

    <activity android:name="yourActivity"
       android:windowSoftInputMode="stateHidden"/>
    

Comments

0

There are two Alternatives:

Alternative 1 :

For single line to focus then use this:

webView.requestFocus(View.FOCUS_DOWN);

Alternative 2 :

webView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP:
                view.requestFocusFromTouch();  
                break;
        }               
        return false;
    }

});

I hope it'll help you...!

Comments

0

Try this one.

webView.getSettings().setJavaScriptEnabled(true);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:document.getElementsByName('[your view name without square brackets]')[0].focus();");
        super.onPageFinished(view, url);
    }
});

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

Comments

0

For me the following worked:

In my Page.xaml, I used a ScrollView with a VerticalStackLayout with the VerticalOptions="Start" (which should disable a fullscreen layout I think, which may lead to a non working adjustResize)

<ScrollView x:Name="MainView">
    <VerticalStackLayout
        VerticalOptions="Start">
            <!-- further code -->
    </VerticalStackLayout>
</ScrollView>

In my MainActivity I added the input mode again:

public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set the window soft input mode to adjustResize programmatically
        Window?.SetSoftInputMode(SoftInput.AdjustResize);
    }
}

Maybe this helps someone else as well.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.