首页 > 其他分享 >Android 判断输入框是正在输入的拼音或词组。而不是最终的单词或短语

Android 判断输入框是正在输入的拼音或词组。而不是最终的单词或短语

时间:2023-04-25 11:11:59浏览次数:36  
标签:词组 输入法 拼音 短语 输入框 InputConnection Android public 输入

Android 输入框监听正在输入的拼音或词组需要结合输入法的特性,具体实现方式可能因输入法而异。

在一些输入法中,可以通过 InputConnection 的 getComposingText() 方法获取正在输入的拼音或词组,而不是最终的单词或短语。

在监听输入框内容变化时,可以在 onTextChanged() 回调中调用这个方法,

判断当前输入的是否是拼音或词组。

public class MyTextWatcher implements TextWatcher {

    private EditText mEditText;

    public MyTextWatcher(EditText editText) {
        mEditText = editText;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // do nothing
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        InputConnection inputConnection = mEditText.onCreateInputConnection(new EditorInfo());
        if (inputConnection != null) {
            CharSequence composingText = inputConnection.getComposingText(0);
            if (composingText != null && composingText.length() > 0) {
                // 正在输入的拼音或词组
            } else {
                // 最终的单词或短语
            }
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
        // do nothing
    }
}

需要注意的是,获取正在输入的拼音或词组可能不是一个完全可靠的方法。

不同的输入法可能会以不同的方式处理输入内容,而这种方式也可能因输入法版本而异。

因此,如果你需要对输入内容进行精确的处理,

可能需要考虑使用更高级的输入法 API 或其他解决方案。

在 Android 输入法框架中,输入法通过 InputMethodService 类提供的

onCreateInputConnection() 方法创建 InputConnection 对象。

可以使用 InputConnection 对象与正在输入的文本进行交互

public class MyInputMethodService extends InputMethodService {

    private static final String PINYIN_SEPARATOR = "'"; // 拼音分隔符

    @Override
    public InputConnection onCreateInputConnection(EditorInfo info) {
        InputConnection inputConnection = super.onCreateInputConnection(info);
        if (inputConnection != null) {
            // 使用 InputConnectionWrapper 封装 InputConnection 对象,以便拦截输入事件
            inputConnection = new MyInputConnectionWrapper(inputConnection, true);
        }
        return inputConnection;
    }

    private class MyInputConnectionWrapper extends InputConnectionWrapper {

        public MyInputConnectionWrapper(InputConnection target, boolean mutable) {
            super(target, mutable);
        }

        @Override
        public boolean commitText(CharSequence text, int newCursorPosition) {
            // 在输入完成后,判断输入的文本是否为拼音或词组
            if (isPinyinOrPhrase(text)) {
                // 如果是拼音或词组,则做相应的处理
                // ...
            }
            return super.commitText(text, newCursorPosition);
        }

        private boolean isPinyinOrPhrase(CharSequence text) {
            String inputText = text.toString();
            if (inputText.endsWith(PINYIN_SEPARATOR)) {
                // 如果文本以拼音分隔符结尾,则说明是正在输入的拼音
                return true;
            }
            // 如果文本不以拼音分隔符结尾,则判断文本是否为词组
            // ...
            return false;
        }
    }
}

在这个示例中,我们首先在 onCreateInputConnection() 方法中获取 InputConnection 对象,并使用 InputConnectionWrapper 封装它。

然后,在 commitText() 方法中判断输入的文本是否为拼音或词组,如果是,就执行相应的处理。在 isPinyinOrPhrase() 方法中,

我们通过判断文本是否以拼音分隔符结尾来判断它是否为正在输入的拼音。

如果不是正在输入的拼音,则可以根据具体的需求进行其他判断。

标签:词组,输入法,拼音,短语,输入框,InputConnection,Android,public,输入
From: https://www.cnblogs.com/javaktolin/p/17352025.html

相关文章

  • Android JAVA连接MQTT,以及常见问题
    本文介绍如何使用Android(JAVA)客户机连接MQTT服务器第一步先引入MQTT在 build.gradle添加以下:dependencies{implementation'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'}接下来演示如何连接创建MQTT客户机类 MqttConnect.classpublicclassMqtt......
  • Android-Service的生命周期
    原文地址blog.csdn.net与Activity类似,Service也有自己的生命周期函数,在不同的时刻,系统会调用对应的Service生命周期函数,不过与Activity声明周期相比,Service的声明周期更加简单,我们通过官方给出的一张图片来体会一下:Service作为Android四大组件之一,应用非常广泛。和Activit......
  • Android补间动画
    帧动画是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧",而动画变化的"中间帧"则由系统计算并补齐!1.补间动画的分类和InterpolatorAndoird所支持的补间动画效果有如下这五种,或者说四种吧,第五种是前面几种的组合而已。AlphaAnimation:透明度渐......
  • 视频直播源码,android动画小飞机旋转效果
    视频直播源码,android动画小飞机旋转效果 //小飞机旋转动效果publicclassPlaneViewextendsView{  privatePaintpaint;  privateintwidth;  privateintheight;  privatefloatcurLength;  privatefloatallLength;  privatefloatmAnimato......
  • Android Automation
    启动虚拟机 emulator@pixel2-skip-adb-auth-allow-host-audio-port5554-no-snapshot-no-boot-anim-memory3072-partition-size8192启动Appium自动下载ChromeDriverappium--allow-insecurechromedriver_autodownload占位......
  • 2 第二章 名词短语及冠词
    第二章名词短语及冠词1)名词短语名词短语包括限定词、形容词、名词三个部分。任一部分都可能省略。在名词短语的开头,还有一些符号来配合标示该名词的范围,即限定词(Determiners)。它与词尾的单复数符号互相呼应,共同决定名词的范围。英语用词尾的变化来表示单、复数。冠词是......
  • 4 第四章 不定词短语
    第四章不定词短语总论Ⅰ所谓“不定词短语”,就是to加上原形动词所形成的短语。Ⅱ不定词是助动词的变化,带有不确定语气。Ⅲ不定词最合理的解释就是把它视为助动词的变化。Ⅳ不定词与助动词的关系极为密切不定词与助动词的共同点不定词与助动词其实是同一种东西的相互变......
  • Android Tencent Shadow 插件接入指南
    原文地址www.jianshu.com撒盐一、clone仓库二、测试编译三、将Shadow库发布到本地仓库四、宿主接入1添加依赖2添加代理Activity主题3清单文件注册代理Activity4在宿主中创建PluginManager管理工具a创建PluginManager文件升级器b创建插件进程服务c......
  • Android多线程通信-handler机制
    AndroidStudio主线程不允许耗时操作,最后通过多线程实现了AndroidStudio远程连接数据库但是主线程可以分线程传值,分线程却不可以直接向主线程传值AndroidStudio通过handler和massage解决了这个问题 话不多说,看代码——privateHandlerhandler=newHandler(){@Overridep......
  • Android Studio的安装及环境配置
    AndroidStudio的安装及环境配置安装jdk下载及安装AndroidStudio下载官网:https://developer.android.google.cn/studio/往下滑:建议下载到除C盘以外的盘:下载好安装程序之后双击安装:一路next,installAndroidVirtualDevice安卓虚拟设备,就是在电脑上虚拟出......