天天看点

Android 原生Dialog一个TextView解决类似超链接的,以及同一个Webview跳到另一个html页面的问题

Android 原生Dialog一个TextView解决类似超链接的,以及同一个Webview跳到另一个html页面的问题

相信大家在开发过程中经常遇到这种类似超连接提示的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;
    }
});