You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在打开新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:30