zalinkujmy – LinkMovementMethod – #13

Dorzuciłam sobie mały alert z informacją o tym, że moja aplikacja powstaje w ramach DSP. Chciałam żeby był tam klikalny link – chcieć to móc 😉

wp-1492607328048.

Zaczęłam od dorzucenia elementu do menu:

wp-1492607622701.


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!–
/!–>
<item
android:id="@+id/application_info_item"
android:title="@string/info"
app:showAsAction="never" />
</menu>

view raw

main_menu.xml

hosted with ❤ by GitHub

Później oprogramowałam kliknięcie na ten element – znaczy się, dołożyłam kolejny case do switcha 😉


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
/*
*/
case R.id.application_info_item:
showInfoDialog();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

Za wiele się tu nie dzieje – po prostu wywołujemy funkcję i zwracamy true, które znaczy tyle, że obsłużyliśmy kliknięcie na elemencie i już nic więcej nie trzeba z nim robić.


private void showInfoDialog() {
final AlertDialog d = new AlertDialog.Builder(this)
.setPositiveButton(android.R.string.ok, null)
.setMessage(getDSPMessage())
.create();
d.show();
((TextView) d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
}

W funkcji zwykły alert dialog, który poza wyświetleniem za wiele nie robi, nawet porządnego listenera nie ma podpiętego pod kliknięcie przycisku. Tym co go wyróżnia jest setMovementMethod, która aktywuje link, sprawia, że da się go kliknąć i otworzy się przeglądarka. Ale zaraz, jaki link, skąd? ano ten 😉


@SuppressWarnings("deprecation")
private Spanned getDSPMessage() {
String html = "Aplikacja została stworzona na potrzeby konkursu <a href=\"http://dajsiepoznac.pl\">DSP 2017</a>";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}

+ zabawy z wersjami API, żeby było można było wyświetlić na starszych i nowszych modelach i żeby IDE się nie czepiało 🙂

Pamiętać – setMovementMethod musi być ustawione po wywołaniu create i show inaczej będzie NPE!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.