Android - Включение только URL-ссылки, но отключение других, когда она касается чего-то не-URL-ссылки в TextView - PullRequest
0 голосов
/ 30 июня 2018

Я внедряю доску. И я хочу, чтобы пользователи могли включать ссылки.

Теперь мой TextView имеет

android:autoLink="web"

атрибут. Однако, это работает немного иначе, чем я ожидал.

enter image description here

Как вы можете видеть, даже если я щелкаю пустую область (+ линии на рисунке), TextView обнаруживает ссылку (синяя подсветка), и если я отпускаю палец, открывается веб-браузер, и он переходит к URL.

Это не то, что я хочу. Я просто хочу, чтобы это работало, когда я ТОЛЬКО нажимаю на ссылку. (Не другой текст, не являющийся URL-адресом, ни пустая область)

и

  1. Я НЕ ЗНАЮ, что пишут пользователи. Другими словами, я не могу задавать конкретные ссылки и не догадываться, какими будут URL-адреса. Это должно применяться ко всем ссылкам, даже если я не знаю.

  2. Количество ссылок может быть больше ОДНОЙ. И я не знаю, сколько ссылок будет включено в контент пользователя.

Кто-то говорит мне, что мне нужно перейти на HTML с помощью WebView. Ну, у меня действительно есть такая возможность? потому что я не думаю, что чаты многих мессенджеров, таких как Kakaotalk, Whatsapp, Wechat или Telegram, даже Instagram сделаны из WebView.

Что делать, если я хочу разместить картинки в середине текста? Я думаю, что это невозможно с TextView. Как это сделать?

1 Ответ

0 голосов
/ 30 июня 2018

Вам нужно обрабатывать ссылки программно. Таким образом, у вас будет возможность разделять кликабельные и не кликабельные промежутки. И вы можете добавить больше кода на клик пролетов, если хотите.

Ниже приведен способ, которым вы можете использовать

private void createUrlSpansInTextView(TextView tv, String text) {
  tv.setText(text); // Or you can remove this line if you already set text to textview
  SpannableString current=(SpannableString)tv.getText();
  URLSpan[] spans=
      current.getSpans(0, current.length(), URLSpan.class);

  for (URLSpan span : spans) {
    int start=current.getSpanStart(span);
    int end=current.getSpanEnd(span);

    current.removeSpan(span);
    current.setSpan(new CustomURLSpan(span.getURL()), start, end,
                    0);
  }
}

Где CustomURLSpan равно

private static class CustomURLSpan extends URLSpan {
  public CustomURLSpan(String url) {
    super(url);
  }

  @Override
  public void onClick(View widget) {
      // Write your code to load urls
  }
}

Что, если я хочу разместить картинки в середине текста? Я думаю это невозможно с TextView. Как это сделать?

Нет с TextView невозможно. Вам нужно искать сторонние библиотеки. Я не уверен, существует ли такой.

...