相信大家在开发过程中经常遇到这种类似超连接提示的dialog。下面介绍一种方法,无须自定义Dialog,用原生Dialog只用一个TextView就能实现的步骤。
//用这个方法来处理字符串,设置特定颜色,以及点击事件。
public static SpannableString formatMessage(final Context context, String msg, int start, int length) {
if (TextUtils.isEmpty(msg) || start >= msg.length()) {
return new SpannableString(msg);
}
SpannableString spannableString = new SpannableString(msg);
int end = start + length;
if (end > msg.length()) {
end = msg.length() - 1;
}
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View view) {
//蓝色字体的点击事件
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
ds.setColor(context.getResources().getColor(R.color.你想要的颜色));
ds.clearShadowLayer();
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
//在dialog里应用
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String content = getString(R.string.基本内容);
String args = getString(R.string.响应点击事件的内容);
SpannableString msg =formatMessage(this, content, content.indexOf(args), args.length());//处理字符串
TextView textView = new TextView(this);
textView.setText(msg);//tv设置处理过的字符串
textView.setTextColor(getResources().getColor(R.color.不响应点击事件的字体的颜色));//要设置一个默认颜色,否则点击会闪烁.
//可以根据自己需求设置textview的padding值,字体大小
textView.setMovementMethod(LinkMovementMethod.getInstance());//要设置,不然蓝色字体点击事件不响应
builder.setTitle(R.string.标题字符串)
.setView(textView);//把自己的textview给dialog设置进去
final AlertDialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.show();
关于同一个webview里有超链接,点击之后用同一个webview加载另一个url,重写shouldOverrideUrlLoading方法
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);//直接跳转到浏览器加载
//也可以用 view.loadUrl(url); 不好使的话就用上面的方法,跳转到浏览器加载
} catch (Exception e) {
}
return true;
}
});