介绍
介绍
福哥在更新app的时候发现手机商店上架app都需要设置“用户隐私协议”,说白了,就是在启动app的时候弹出一个对话框,告知用户我们的隐私政策,同意用户隐私协议才能继续使用app,否则需要强制退出app软件。
那么这里面的文字用的是TextView,里面的“协议”和“政策”都是需要链接到一个包含内容的网页地址上的,如何在TextView增加超链接呢?
SpannableString
要实现在TextView里设置超链接需要借助SpannableString这个对象,这个SpannableString可以在一段文字当中选择一部分文字设置它们的样式
初始化
初始化SpannableString对象
SpannableString spannableString; spannableString = new SpannableString("福哥在公众号里教大家学习C/C++、Java、PHP语言编程哦");
设置下划线
选择一段文字,设置下划线
spannableString.setSpan(new UnderlineSpan(), 12, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new UnderlineSpan(), 18, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new UnderlineSpan(), 23, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
设置超链接
选择一段文字,增加超链接。其实这里说的超链接就是给这段文字增加了点击事件,然后在事件里打开网址
spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { Uri uri = Uri.parse("https://tongfu.net/home/35/tag/同福编程.html"); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } }, 12, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { Uri uri = Uri.parse("https://tongfu.net/home/35/tag/同福编程.html"); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } }, 18, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { Uri uri = Uri.parse("https://tongfu.net/home/35/tag/同福编程.html"); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } }, 23, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
设置颜色
选择一段文字,设置字体颜色
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#4e6ef2")), 12, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#4e6ef2")), 18, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#4e6ef2")), 23, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
绑定TextView
SpannableString设置好了之后,就可以设置到TextView里了,这里的GetSpannableString方法里就是上面设置SpannableString的逻辑
TextView textView; textView = findViewById(R.id.desc); textView.setText(GetSpannableString()); textView.setMovementMethod(LinkMovementMethod.getInstance());
链接去掉下划线
经过前面的设置后,我们的TextView里的C/C++、Java、PHP都会加上超链接了,不过你会发现每个超链接都有显示下划线,如果想去掉下划线怎么办?
可以在设置超链接时候重新updateDrawState方法,在里面去掉下划线
spannableString.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { Uri uri = Uri.parse("https://tongfu.net/home/35/tag/同福编程.html"); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } @Override public void updateDrawState(TextPaint ds) { ds.setUnderlineText(false); } }, 12, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);