Я пытаюсь добавить ClickableSpan
к некоторым динамическим URL-адресам PDF в моем диалоговом окне. Я хочу сделать это потому, что в настоящее время PDF-файлы не открываются в браузере устройства по умолчанию. Однако некоторые устройства с уже установленным приложением для просмотра PDF могут загрузить PDF. Но мне нужно открыть pdf во всех устройствах.
То, что я пытаюсь сделать здесь, это установить clickablespan
для этих ссылок pdf и открыть в webview
.
Моя проблема в том, что onClick
метод, кажется, не вызывается, и все же, ссылка пытается открыться в браузере по умолчанию.
Я попытался сделать
setLinksClickable(false);
и комментируя
messageText.setMovementMethod(LinkMovementMethod.getInstance());
, но метод onClick
не выполняется. но интересно, что updateDrawState(TextPaint ds)
метод выполняется, и я могу изменить цвет ссылки, как я хочу.
Это сообщение содержит другие URL-адреса, адреса электронной почты и номера телефонов, которые мне нужно нажимать, делая только PDF-URL-адреса дляОбращайтесь к clickableSpan
.
Благодарим вас за то, что кто-то может помочь мне разобраться с проблемой здесь или другим способом ее решения.
Ниже приведен код
Спасибозаранее
TextView messageText = customeDialog.findViewById(R.id.text);
final WebView webView = customeDialog.findViewById(R.id.pdf_viewer);
Spanned formattedString = Utils.getHtmlFromString(message);
messageText.setText(formattedString);
Map<String, String> links = Utils.extractUrls(URLDecoder.decode(message));
if(null != links && links.size() > 0 ){
Iterator it = links.entrySet().iterator();
while (it.hasNext()) {
final Map.Entry pair = (Map.Entry)it.next();
if(pair.getKey().toString().contains(".pdf")) {
System.out.println("////PDF display name : " + pair.getKey());
System.out.println("////PDF URL : " + pair.getValue());
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
webView.getSettings().setSupportZoom(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(pair.getValue().toString());
}
public void updateDrawState(TextPaint ds) {// override updateDrawState
ds.setUnderlineText(true); // set to false to remove underline
ds.setColor(Color.RED);
}
};
int startingPosition = formattedString.toString().indexOf(pair.getKey().toString());
int endingPosition = formattedString.toString().indexOf(pair.getKey().toString()) + pair.getKey().toString().length();
spannableString.setSpan(clickableSpan, startingPosition, endingPosition, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
messageText.setText(spannableString);
}
messageText.setLinksClickable(true);
messageText.setMovementMethod(LinkMovementMethod.getInstance());