Reputation: 131
I have a fragment with EditText and add it into the layout using transactions. But if I rotate to landscape the soft keyboard disappears.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (getSupportFragmentManager().findFragmentById(R.id.fragmentContainer) == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.fragmentContainer, new FragmentWithEditText())
.commit();
}
}
}
I want keyboard state still unchanged after rotate using fragment transactions. Because if I don't use transactions, but add a fragment straight in the layout, the keyboard not disappeared.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:tag="fragmentWithKeyboard"
android:name="com.test.FragmentWithEditText"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
I already tried to use android:windowSoftInputMode="stateUnchanged"
or android:configChanges="keyboardHidden|orientation"
, but didn't help.
Also I wrote a sample app with this behavior https://github.com/anton9088/FragmentAndKeyboard
Similar questions:
Retain soft-input/IME state on Orientation change
Keyboard dismissed on rotation to landscape mode Android
Upvotes: 7
Views: 2331
Reputation: 1348
The problem is that our view should has windowSoftInputMode
set to stateUnchanged
which means:
The soft keyboard is kept in whatever state it was last in, whether visible or hidden, when the activity comes to the fore.
In an activity it can be obtained by simply change in AndroidManifest.xml
by adding this:
<activity
...
android:windowSoftInputMode="stateUnchanged"/>
Unfortunately it will not work for fragments.
If your fragment is a DialogFragment
you can obtain it by adding this code to your onCreateDialog
method while you have already created a dialog:
Window window = dialog.getWindow();
if (window != null) {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED);
}
Upvotes: 1
Reputation: 816
Change below lines in your manifest i am sure it will helps you
<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>
So replace your
android:configChanges="keyboardHidden|orientation"
To
android:configChanges="orientation|screenSize"
Upvotes: -1
Reputation: 393
Try to set your EditText's attribute freezesText value to true.
You can also add focus in onViewCreated callback manually
Upvotes: 1