如何在打开新Activity及执行文本选择操作时保持软键盘不关闭?
解决方案:保持软键盘在Activity跳转/文本操作时不关闭
核心问题分析
当前代码虽设置了Window.SetSoftInputMode(SoftInput.StateAlwaysVisible),但由于PROCESS_TEXT类型的Activity启动后会快速销毁,系统默认会在Activity结束时收起软键盘,同时窗口配置未完全适配软键盘持续显示的需求。
具体修改方案
1. 调整Activity的Manifest配置
给目标Activity添加windowSoftInputMode属性,明确软键盘行为:
<activity android:name="app1.droid.BoldActivity" android:label="Bold" android:windowSoftInputMode="stateVisible|adjustPan"> <intent-filter> <action android:name="android.intent.action.PROCESS_TEXT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
stateVisible:强制软键盘保持可见状态adjustPan:避免窗口调整导致软键盘被挤压收起
2. 修改Activity代码逻辑
移除不必要的base.OnStop()调用,优化软键盘设置时机,确保操作完成后软键盘状态不受影响:
public class BoldActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 精准配置软键盘参数,覆盖系统默认行为 Window.SetSoftInputMode(SoftInput.AdjustPan | SoftInput.StateVisible); var text = Intent.GetCharSequenceExtra(Android.Content.Intent.ExtraProcessText); var read = Intent.GetBooleanExtra(Android.Content.Intent.ExtraProcessTextReadonly, false); if (!read && text != null) { var outIntent = new Android.Content.Intent(); outIntent.PutExtra(Android.Content.Intent.ExtraProcessText, HtmlCompat.FromHtml("<b>" + text + "</b>", 0)); SetResult(Result.Ok, outIntent); } Finish(); } // 重写销毁方法,避免系统主动收起软键盘 protected override void OnDestroy() { Window.SetSoftInputMode(SoftInput.StateVisible); base.OnDestroy(); } }
补充适配方案
针对部分机型的兼容性问题,可在原输入页面的onActivityResult中重新唤起软键盘:
// 原输入页面的代码示例 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (yourEditText != null && resultCode == Result.Ok) { yourEditText.RequestFocus(); InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService); imm.ShowSoftInput(yourEditText, ShowFlags.Implicit); } }
内容的提问来源于stack exchange,提问作者qp qp
相关产品推荐
相关产品推荐

