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