如何在Android中设置文本内的链接?

时间:2019-09-19 16:37:09

标签: java android hyperlink jsoup spannablestring

因此,我正在使用Jsoup进行Web抓取。我可以从网上抓取数据,但是,问题是我分别得到了链接和文本。我希望这些链接设置在我的文本中。我正在使用SpannableStringBuilder,所以有很多链接和很多文本。所以当我是android开发新手时,我不知道该如何解决这个问题。

    private void getWebsite() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            final SpannableStringBuilder 
                    builder = new SpannableStringBuilder();
            try {
                Document doc = Jsoup.
                        connect("https://www.wikipedia.org/").get();
                String title = doc.title();
                Elements links = doc.select("a[href]");

                builder.append(title).append("\n");

                for (Element link : links) {
                    final String url = link.attr("href");
                    builder.append("\n")
                            .append("Link: ")
                            .append(url, new URLSpan(url), 
                                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
                            .append("\n")
                            .append("Text: ")
                            .append(link.text());
                }

            } catch (IOException e) {
                builder.append("Error : ")
                        .append(e.getMessage()).append("\n");
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(builder.toString());
                    textView.setMovementMethod
                            (LinkMovementMethod.getInstance());
                }
            });
        }
    }).start();}

我正在得到这种格式的输出。

链接://en.wikipedia.org /

文本:英语5678 000多篇文章

链接://ja.wikipedia.org /

文本:日本语1112 000多个记事本

链接://es.wikipedia.org /

文本:Español1 430 000+artículos ...... ......

我想要类似这种格式的输出,

**文本:英语5678 000多篇文章**,  在那行内,我想 加入这个连结 **链接://en.wikipedia.org/** 作为超链接或某种方式,以便我可以单击此文本并直接像在MS Word中一样直接转到网页。

1 个答案:

答案 0 :(得分:1)

您正在寻找使用HTML设置文本值的方法。 Here is the documentation,下面是一些示例代码:

import 'reflect-metadata';
import { injectable, inject, Container, unmanaged } from 'inversify';

const container = new Container();

const registerProviders = (...providers: any[]) =>
  providers.forEach(provider => container.bind(provider.name).to(provider));

const getProvider = (provider): any => container.get(provider.name);

@injectable()
export class MessageBroker {
  start = () => console.log('init message broker');
}

@injectable()
export abstract class Repository {
  @inject(MessageBroker.name) private mb: MessageBroker;

  constructor(@unmanaged() protected readonly user: any) {}

  // this.mb is undefined
  initialize = () => this.mb.start();
}

@injectable()
export class UserRepository extends Repository {
  constructor() {
    super({ user: 'some object' });
    this.initialize();
  }
}

registerProviders(UserRepository, Repository, MessageBroker);

const repo: UserRepository = getProvider(UserRepository);

您可以在其中使用HTML设置值。您还可以更新颜色,粗体,斜体等,只要您使用HTML属性即可。