当前位置:首页 > Android > 正文内容

安卓 获取TextView手指点击所在位置的文字

3年前 (2021-03-18)Android
TextView tv;

    public final static String HTML_TEXT =
            "<p>\t\t\t\t你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在你知道现在是什么季节吗?春天可真有趣呀!</p><p>你知道现在是什么季节吗?春天可真有趣呀!</p><p>你知道现在是什么季节吗?春天可真有趣呀!</p><p>你知道现在是什么季节吗?春天可真有趣呀!</p><p>你知道现在是什么季节吗?春天可真有趣呀!</p><p>你知道现在是什么季节吗?春天可真有趣呀!</p>";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    
        tv = findViewById(R.id.tv);

        tv.setText(Html.fromHtml(this, HTML_TEXT));

        SpannableStringBuilder s = new SpannableStringBuilder(tv.getText());
        for(int i=0;i<s.length();i++){

            ForegroundColorSpan bkSpan = new ForegroundColorSpan(Color.BLACK);
            s.setSpan(bkSpan, 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            s.setSpan(new ClickableSpan() {
                @Override
                public void onClick(@NonNull View widget) {

                }

                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                }
            },i,i+1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        }
        tv.setText(s,TextView.BufferType.SPANNABLE);
//启用上面为每个字绑定的ClickableSpan
        tv.setMovementMethod(LinkMovementMethod.getInstance());
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              
                TextView tv = (TextView) v;
                int start = 0;
                int end = 0;

                int left = tv.getSelectionStart() - 1;
                int right = tv.getSelectionEnd() + 1;

                String string = tv.getText().toString();

                while (left >= 0) {
                    String s = tv
                            .getText()
                            .subSequence(left,
                                    left+1).toString();
                    if (s.equals("!") || s.equals("?")) {
                        break;
                    }else{
                        left-=1;
                    }
                }
                while (right < string.length()) {
                    String s = tv
                            .getText()
                            .subSequence(right-1,
                                    right).toString();
                    if (s.equals("!") || s.equals("?")) {
                        break;
                    }else{
                        right+=1;
                    }
                }

                 start = left + 1;
                 end =  right;


                String s = tv
                        .getText()
                        .subSequence(start,
                                end).toString();
                tv.setText(StyleHtml.fromHtml(MainActivity.this, HTML_TEXT));
                SpannableStringBuilder builder = new SpannableStringBuilder(tv.getText().toString());

                //ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色
                ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.WHITE);
                ForegroundColorSpan bkSpan = new ForegroundColorSpan(Color.BLACK);
                BackgroundColorSpan redSpanBg = new BackgroundColorSpan(Color.RED);
//
                builder.setSpan(bkSpan, 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                builder.setSpan(redSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                builder.setSpan(redSpanBg, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);



                for(int i=0;i<builder.length();i++){
                    builder.setSpan(new ClickableSpan() {
                        @Override
                        public void onClick(@NonNull View widget) {

                        }
                    },i,i+1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
                }
                tv.setText(builder);


                Log.d("tapped on:", s);
            }
        });
    }


扫描二维码推送至手机访问。

版权声明:本文由小祥子的博客发布,如需转载请注明出处。

本文地址:http://www.xiaoxiangzi.com/post/95.html

相关文章

Android 网络请求后的JSON解析

JSON解析用阿里巴巴的fastjson。implementation 'com.alibaba:fastjson:1.1.71.android' 根据上一篇文章,登录接口登...

Android根据关键词标红部分文字

            String mKeyWord =&...

Android Intent界面之间的跳转

当前页面跳转到NextActivity页面Intent intent = new Intent(this,NextActivity.class) this.s...

Android常用第三方框架

分类二级分类框架名称简介UI刷新SmartRefreshLayout智能下拉刷新框架UI刷新Android-PullToRefresh比较早的一款下拉刷新框架UI刷新android-Ultra-Pul...

Android SharedPreferences的简单使用

Android的SharedPreferences与iOS的UserDefaults.standard十分相同,都是是保存一些轻量配置数据的地方。这里假设保存用户名SharedPreferences&...

Android 网络请求 Kalle

APP作为前端,比较核心的功能算是网络请求了,这里用Kalle,这个第三方的网络请求框架。implementation 'com.yanzhenjie:kalle:0.1.7'&nbs...