天天看點

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;
    }
});