Reputation: 1850
When I try to write something in an EditText which is at the bottom of the screen, the soft keyboard hides the EditText. How can I resolve this issue? Below is my xml code. I'm using this in a Fragment.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayoutTopDetails"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayoutTop"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginTop="6dp"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_design1"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_weight="100"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ImageViewProfImagePostDetail"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_marginTop="2dp"
android:layout_weight="24.84"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="60"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewNamePostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Robin"
android:textSize="17sp" />
<TextView
android:id="@+id/textViewLocationPostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:drawableLeft="@drawable/location"
android:text="beijing, China" />
<TextView
android:id="@+id/textViewTimeAgoPostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 18min ago" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="15"
android:orientation="horizontal" >
<TextView
android:id="@+id/textViewReportAbusePostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/flag"
android:paddingLeft="5dp" />
<TextView
android:id="@+id/textViewDeletePostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="15dp"
android:background="@drawable/delete"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/textViewDescriptionPostDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="2dp"
android:singleLine="false"
android:text="Description or caption of the post"
android:textSize="17sp" />
</LinearLayout>
<ImageView
android:id="@+id/feedPostedImagePostDetail"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_marginTop="5dp"
android:scaleType="fitCenter"
android:visibility="gone" />
<LinearLayout
android:id="@+id/linearLayoutOptions"
android:layout_width="fill_parent"
android:layout_height="33dp"
android:layout_marginTop="2dp"
android:layout_weight="100"
android:background="@drawable/bar"
android:orientation="horizontal" >
<TextView
android:id="@+id/textViewShakePostDetail"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_marginLeft="15dp"
android:layout_weight="25"
android:drawableLeft="@drawable/like"
android:gravity="center"
android:singleLine="true"
android:text="Shake"
android:textSize="12sp" />
<TextView
android:id="@+id/textViewCommentPostDetail"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="41"
android:drawableLeft="@drawable/comment"
android:gravity="center"
android:paddingLeft="20dp"
android:text="Comment" />
<TextView
android:id="@+id/textViewSharePostDetail"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="33"
android:drawableLeft="@drawable/share"
android:gravity="center"
android:paddingLeft="20dp"
android:text="Spread" />
</LinearLayout>
</LinearLayout>
<ListView
android:id="@+id/listViewFeedsDetail1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayoutTopDetails"
android:layout_marginBottom="4dp"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginTop="6dp" >
</ListView>
<LinearLayout
android:id="@+id/linearLayoutPostcomment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/listViewFeedsDetail1"
android:background="#FFFFFF"
android:orientation="horizontal"
android:weightSum="100" >
<EditText
android:id="@+id/editTextComment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="80" />
<Button
android:id="@+id/buttonPostComment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="20"
android:background="#F0F8FF"
android:text="Post" >
</Button>
</LinearLayout>
</RelativeLayout>
</ScrollView>
I have tried to resolve this issue by adding changes through code but no success.
Below is the image before and after clicking on the EditText.
Upvotes: 67
Views: 73701
Reputation: 27
I had stacked at this problem for 1 hour and find only a solution that's work for me.
In xml.. Edittext should be under ScrollView. And then go to manifest file and Put this line in your application tag:-
android:
windowSoftInputMode="stateHidden|adjustPan"
Upvotes: 0
Reputation: 23
Ok guys so I spent about an hour perfecting this thing and found the solution:
Things to follow:
android:windowSoftInputMode="adjustResize
(in Manifest)android:fitsSystemWindows="true"
I have tested this on three different projects and it works..
[OPTIONAL] In case, window padding causes any issue, make that particular activity with ActionBar theme with android:theme="@style/Theme.Konnect"
(in manifest inside the activity)
Upvotes: 0
Reputation: 4374
For users using adjustPan and Fullscreen below is the answer.
// Set the OnApplyWindowInsetsListener to handle window insets changes
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets ->
// Check if the bottom inset (keyboard) is non-zero and adjust the layout accordingly
if (insets.isVisible(WindowInsetsCompat.Type.ime())) {
// Keyboard height if you need
// val keyboardHeight = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
val windowRect = Rect()
view.getWindowVisibleDisplayFrame(windowRect)
val editTextRect = Rect()
mEditText.getGlobalVisibleRect(editTextRect)
// Calculate the difference between the bottom of the editText and the windowRect
val diff = editTextRect.bottom - windowRect.bottom
if (diff > 0) {
view.scrollBy(0, diff.plus(SET_YOUR_DESIRE_MARGIN_HERE))
}
} else {
view.scrollTo(0, 0)
}
// Return the insets to keep the system default behavior
insets
}
For API level 29 and below you have to set SOFT_INPUT_ADJUST_RESIZE in your Activity or Fragment. You can reset it in lifecycle event call back based on your need. Like below for Fragment, set it in onAttach ->
override fun onAttach(context: Context) {
super.onAttach(context)
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.R)
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
and reset it in onDetach.
override fun onDetach() {
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.R)
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
super.onDetach()
}
Hope this will help future users.
Upvotes: 0
Reputation: 482
Try this, it might be help you.
Add the following line to your EditText
android:paddingVertical="16dp"
Upvotes: 0
Reputation: 3784
In manifest add this line on the particular activity tag:
android:windowSoftInputMode="adjustPan"
Upvotes: 104
Reputation: 1552
Add this line on your manifest file on your activity and see the magic.
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
Upvotes: 0
Reputation: 1176
Put this line in your application tag:-
android:windowSoftInputMode="stateHidden|adjustPan"
example:-
<application
android:name=".application.MyApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/AppTheme"
android:windowSoftInputMode="stateHidden|adjustPan"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:supportsRtl,android:allowBackup"
tools:targetApi="n">
Upvotes: 1
Reputation: 150
I handled that by adding ScrollView around View with EditText inside.
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
// Other views
<EditText ... />
</ScrollView>
Adding tags to Android Manifest didn't help me.
Upvotes: 2
Reputation: 17
The solution for me was, simply, adding this to the parent layout : android:fitsSystemWindows="true"
Upvotes: -1
Reputation: 3450
Here is simple solution for Android EditText issue of hiding behind SoftKeypad. Use the code in AndroidManifest.xml file of the project module.
<activity
android:name="com.example.MainActivity"
android:label="@string/activity_main"
android:windowSoftInputMode="adjustResize|stateHidden" />
This code worked for me.
Inside the manifest file in activity tag add this attribute:
android:windowSoftInputMode="adjustResize|stateHidden"
There are more such values for this attribute (android:windowSoftInputMode
) which will come as recommendation list. You can check with them also.
Upvotes: 17
Reputation: 1591
Declare windowSoftInputMode="adjustResize" in manifest.xml file
<activity
android:name=".example"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize" />
provide scroll view to the xml layout file
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:fitsSystemWindows="true">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:isScrollContainer="false">
// add edittext here...
</ScrollView>
</RelativeLayout>
Upvotes: 11
Reputation: 1020
Use the below code where:
InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ipmm.hideSoftInputFromWindow(url.getWindowToken(), 0);
where url in my code is:
url = (EditText) findViewById(R.id.eT_webbrowser);
or Try this:
InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ipmm.hideSoftInputFromWindow(null, 0);
As another option try this: This always hides the soft input mode such that your EditText is visible
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Upvotes: 3
Reputation:
For that you have to declared in your activity manifeast
<activity
android:name=".activityname"
android:label="@string/app_name"
android:windowSoftInputMode="adjustPan|adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Upvotes: 22