方向改变时键盘消失



我有一个片段与EditText和添加到使用事务的布局。但是如果我旋转到横屏,软键盘就消失了。

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();
        }
    }
}

我希望在使用片段事务旋转后键盘状态保持不变。因为如果我不使用事务,而是在布局中直接添加一个片段,键盘不会消失。

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

我已经尝试使用android:windowSoftInputMode="stateUnchanged"android:configChanges="keyboardHidden|orientation",但没有帮助。

我还写了一个示例应用程序与此行为https://github.com/anton9088/FragmentAndKeyboard

相似的问题:

在方向改变时保持软输入/IME状态

Android

尝试将EditText的属性freezesText值设置为true

你也可以在onViewCreated回调中手动添加焦点

问题

问题是我们的视图应该将windowSoftInputMode设置为stateUnchanged,这意味着:

当活动出现时,软键盘将保持在它最后的状态,无论是可见还是隐藏。

在一个活动中,它可以通过简单地在AndroidManifest.xml中添加以下内容来获得:

<activity
    ...
    android:windowSoftInputMode="stateUnchanged"/>

遗憾的是,它不能用于片段。

DialogFragment

解决方案

如果你的片段是一个DialogFragment,你可以通过添加以下代码到你的onCreateDialog方法,而你已经创建了一个对话框:

Window window = dialog.getWindow();
if (window != null) {
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED);
}

在清单中更改以下行,我相信它会对您有所帮助

<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>

所以替换你的

android:configChanges="keyboardHidden|orientation"android:configChanges="orientation|screenSize"

最新更新