Nick
Nick

Reputation: 3435

android soft keyboard spoils layout when appears

Here is a layout:

<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" >

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

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0px"
            android:layout_weight="1" />

        <FrameLayout
            android:background="#0000ff"
            android:layout_width="match_parent"
            android:layout_height="0px"
            android:layout_weight="1" />

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0px"
            android:layout_weight="1" />

    </LinearLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

</RelativeLayout>

enter image description here

I want blue bar to remain intact when EditText is touched and soft keyboard appears. I.e. I want its size and position to be preserved. I tried all four possible values for my activity's parameter android:windowSoftInputMode in the AndroidManifest. And always my blue bar moves or shrinks on soft keyboard appearing:

android:windowSoftInputMode="adjustUnspecified" or by default:

enter image description here

android:windowSoftInputMode="adjustPan" or android:windowSoftInputMode="adjustNothing":

enter image description here

android:windowSoftInputMode="adjustResize":

enter image description here

Is it ever possible to keep it the same size and position when soft keyb appears?

Upvotes: 15

Views: 8403

Answers (3)

سعید .م
سعید .م

Reputation: 137

you must use <ScrollView> as main layout. example:

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

or use this code in AndroidManiFest.xml:

<activity
     android:windowSoftInputMode="adjustNothing">
</activity>

Upvotes: 6

Oguz Ozcan
Oguz Ozcan

Reputation: 1714

I think it is because of the LinearLayout that you are using. Can you please change your inner layout with relative layout? In your current situation, keyboard just changes the margins between components because of the linear layout. And change your config with adjustNothing.

Upvotes: 0

Richard Taylor
Richard Taylor

Reputation: 2742

Since the input is coming into an EditText of yours, it's always going to move something.

Consider having two layouts, one for when the keyboard is down, one for when the keyboard is up.

Using a ViewSwitcher may help with that.

Upvotes: 1

Related Questions