androidandroid-edittextwindow-soft-input-mode

Android: Resize only parts of view with soft keyboard on screen


I have a view with a Edittext field on top of an ImageView. When the keyboard comes up I want the window to resize so that EditText is no longer hidden by the keyboard. In the AndroidManifest file I declared android:windowSoftInputMode="adjustResize" and the screen is resized but the issue is that I want the ImageView to not be re-sized. How can I make the ImageView unaffected?

Could I inflate an additional layout with just the ImageView or will the resize still affect it? enter image description here


Solution

  • The full solution involves a few key points

    Here is the layout file

    <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"
        tools:context="com.so3.MainActivity">
        <ScrollView
            android:id="@+id/scroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/stickfigures"/>
        </ScrollView>
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@android:color/holo_blue_bright"
            android:text="Please enter text"
            android:textSize="40sp"
            android:gravity="center_horizontal"/>
    </RelativeLayout>
    

    Here is my Activity

    package com.so3;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ScrollView;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ScrollView sv = (ScrollView)findViewById(R.id.scroll);
            sv.setEnabled(false);
        }
    }
    

    My AndroidManifest

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.so3" >
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.so3.MainActivity"
                android:windowSoftInputMode="adjustResize"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    

    Screen shots of my solution

    screenshot 1 screenshot 2