相信大家在開發過程中經常遇到這種類似超連接提示的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; } });