Связать ключевое слово в TextView с файлом / каталогом - PullRequest
1 голос
/ 03 сентября 2010

Можно ли связать ключевое слово в TextView с файлом или каталогом на SD-карте пользователя? Мое приложение создает файлы трассировки стека в случае сбоя, и я хочу, чтобы пользователь мог щелкнуть ссылку в моем диалоговом окне «О программе», чтобы просмотреть либо последнюю версию, либо папку, содержащую их все. (Что-то вроде «Если это приложение дает сбой, отправьте нам [link] последний файл stack.trace [/ link] по адресу myapp@example.com.»)

Я знаю, что можно использовать следующий код для создания веб-ссылки, но я попытался изменить его, чтобы использовать "file: ///sdcard/path/to/file/stack.trace", который заставляет мое приложение принудительно Закрыть при нажатии на ссылку.

<string name="strSample">This is Web link to &lt;a href=&quot;http://www.google.com&quot;>Google&lt;/a>!</string>

final TextView tvSample = (TextView)findViewById(R.id.tvSample);
tvSample.setMovementMethod(LinkMovementMethod.getInstance());
String strSample = getResources().getString(R.string.strSample);
tvSample.setText(Html.fromHtml(strSample));

1 Ответ

0 голосов
/ 03 сентября 2010

Вы можете расширить свой метод, заменив Html.fromHtml(strSample) часть, которая возвращает Spannable.Создайте свой собственный Spannable и добавьте к нему ClickableSpan.В методе onClick вы можете разместить любую логику, которая вам нужна.Вот краткий пример, который вы можете продлить

public Spannable getProfileLink(final Context context) {
    final String name = firstName + " " + lastName;
    Spannable spans = SpannableStringBuilder.valueOf(name);
    ClickableSpan clickSpan = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            // TODO - call profile here
            Toast.makeText(context, "Will call profile", Toast.LENGTH_LONG);
        }

    };
    spans.setSpan(clickSpan, 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return spans;
}
...