关于#android#的问题:最近写富文本遇到一个难题,查阅了百度等资料好像都没有明确说明,下面是问题:编辑框输入的文字中长按选了一部分字,如何获取选取字的开始光标位置和结束光标位置

最近写富文本遇到一个难题,查阅了百度等资料好像都没有明确说明,下面是问题:编辑框输入的文字中长按选了一部分字,如何获取选取字的开始光标位置和结束光标位置?

可以使用 EditText 的 getSelectionStart() 和 getSelectionEnd() 方法来获取选取文本的开始光标位置和结束光标位置。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7441982
  • 这篇博客也不错, 你可以看下关于极光推送收不到通知的问题
  • 除此之外, 这篇博客: 百度和极光的推送中的 百度推送 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.第一步就是在百度开发者服务管理中创建项目,然后拿到API key , Secret Key ;这个过程就不多说了,上官网直接申请就行

    2.下载云推送的客户端SDK,SDK的压缩文件中包含一个例子代码,一个用户手册,和所需的libs和资源等(其实直接看用户手册和Demo基本就没问题了)。

    3.根据百度平台开发文档,一步一步做,仔细,不要遗漏基本不会出什么问题。

    4.重点就介绍下 Android 端 接受推送过来消息的 类。
    我在项目中 起名字为BaiDuPushReceiver
    下面为BaiDuPushReceiver的详细内容

    /**
     * 百度推送的接受类
     * 
     * @ClassName: BaiDuPushReceiver
     * @Description: TODO( 百度推送的接受类)
     * @author EmperorBoBo
     * @date 2016-6-30
     * @company:
     */
    public class BaiDuPushReceiver extends PushMessageReceiver {
    
        private String TAG = "BaiDuPushReceiver";
        private PushMessageBean model = null;
    
        /**
         * 调用PushManager.startWork后,sdk将对push
         * server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel
         * id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
         * 
         * @param context
         *            BroadcastReceiver的执行Context
         * @param errorCode
         *            绑定接口返回值,0 - 成功
         * @param appid
         *            应用id。errorCode非0时为null
         * @param userId
         *            应用user id。errorCode非0时为null
         * @param channelId
         *            应用channel id。errorCode非0时为null
         * @param requestId
         *            向服务端发起的请求id。在追查问题时有用;
         * @return none
         */
        @Override
        public void onBind(Context context, int errorCode, String appid,
                String userId, String channelId, String requestId) {
    
            String responseString = "onBind errorCode=" + errorCode + " appid="
                    + appid + " userId=" + userId + " channelId=" + channelId
                    + " requestId=" + requestId;
            Log.e(TAG+"baidu-->", responseString);
    
            if (errorCode == 0) {
                // 绑定成功
                Log.e(TAG, "绑定成功");
            }
            // 还需处理
    
        }
    
        /**
         * setTags() 的回调函数。
         * 
         * @param context
         *            上下文
         * @param errorCode
         *            错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。
         * @param successTags
         *            设置成功的tag
         * @param failTags
         *            设置失败的tag
         * @param requestId
         *            分配给对云推送的请求的id
         */
        @Override
        public void onDelTags(Context context, int errorCode,
                List<String> successTags, List<String> failTags, String requestId) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * listTags() 的回调函数。
         * 
         * @param context
         *            上下文
         * @param errorCode
         *            错误码。0表示列举tag成功;非0表示失败。
         * @param tags
         *            当前应用设置的所有tag。
         * @param requestId
         *            分配给对云推送的请求的id
         */
        @Override
        public void onListTags(Context context, int errorCode, List<String> tags,
                String requestId) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * 接收透传消息的函数。
         * 
         * @param context
         *            上下文
         * @param message
         *            推送的消息
         * @param customContentString
         *            自定义内容,为空或者json字符串
         */
        @Override
        public void onMessage(Context context, String message,
                String customContentString) {
        }
    
        /**
         * 接收通知到达的函数。
         * 
         * @param context
         *            上下文
         * @param title
         *            推送的通知的标题
         * @param description
         *            推送的通知的描述
         * @param customContentString
         *            自定义内容,为空或者json字符串
         */
        @Override
        public void onNotificationArrived(Context context, String title,
                String description, String customContentString) {
    
               // 这是用来接受自定义的内容的
    
    
        }
    
        /**
         * 接收通知点击的函数。
         * 
         * @param context
         *            上下文
         * @param title
         *            推送的通知的标题
         * @param description
         *            推送的通知的描述
         * @param customContentString
         *            自定义内容,为空或者json字符串
         */
        @Override
        public void onNotificationClicked(Context context, String title,
                String description, String customContentString) {
    
            //当通知被 点击时候再这个方法里进行逻辑处理
    
        }
    
        /**
         * setTags() 的回调函数。
         * 
         * @param context
         *            上下文
         * @param errorCode
         *            错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。
         * @param successTags
         *            设置成功的tag
         * @param failTags
         *            设置失败的tag
         * @param requestId
         *            分配给对云推送的请求的id
         */
        @Override
        public void onSetTags(Context context, int errorCode,
                List<String> successTags, List<String> failTags, String requestId) {
            //通过标签推送接受的消息方法
        }
    
        /**
         * PushManager.stopWork() 的回调函数。
         * 
         * @param context
         *            上下文
         * @param errorCode
         *            错误码。0表示从云推送解绑定成功;非0表示失败。
         * @param requestId
         *            分配给对云推送的请求的id
         */
        @Override
        public void onUnbind(Context arg0, int arg1, String arg2) {
            // TODO Auto-generated method stub
    
        }
    
    }

    此类当中 对个方法介绍的已经很详细了。

  • 您还可以看一下 吴刚老师的【吴刚】技术答疑与项目讲评视频教程(随时更新)课程中的 【项目解析】镜头光晕制作方法小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,你想知道如何通过编程的方式获取编辑框中选取字的起始光标位置和结束光标位置。对于这个问题,我将提供一个基于JavaScript的解决方案。

    请按照以下步骤进行操作:

    1. 在编辑框中添加mouseup事件监听器,当用户释放鼠标按钮时触发。
    document.getElementById("editor").addEventListener("mouseup", function(event) {
        // 在这里获取选取字的起始光标位置和结束光标位置
    });
    
    1. 在事件处理程序中,可以使用getSelection()方法获取用户选取的文本。
    document.getElementById("editor").addEventListener("mouseup", function(event) {
        var selection = window.getSelection();
    
        // 检查用户是否选取了文本
        if (selection.toString().length > 0) {
            var startOffset = selection.anchorOffset;
            var endOffset = selection.focusOffset;
    
            // 在这里可以使用起始光标位置和结束光标位置进行后续处理
        }
    });
    
    1. 可以将起始光标位置和结束光标位置存储在变量中,或进行其他任何需要的操作。

    这是一个简单的示例,仅获取了光标的偏移量。你可以根据你的实际需求进行进一步的处理。

    如果你在使用不同的编辑框或富文本编辑器,你需要根据实际情况进行相应的调整。以上提供的是一个基于现有的JavaScript解决方案的示例。

    希望这个解决方案能够帮助到你,如果你还有其他疑问,请随时提问。