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

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

5个月前 (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 PopupWindow的基本使用

需求:希望点击文本区域的时候,在手指处添加一个控件,开始想到的是相对布局,添加一个隐藏层,根据点击然后显示并且重设坐标,后来发现这个方向是错的,甚至有点蠢,后来看到了popupWindow。Popup...

Android Intent界面之间的跳转

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

Android SharedPreferences的简单使用

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

Android 网络请求 Kalle

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

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

            String mKeyWord =&...