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);
}
}

view raw
MainActivity.java
hosted with ❤ by GitHub

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());
}

view raw
MainActivity.java
hosted with ❤ by GitHub

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);
}
}

view raw
MainActivity.java
hosted with ❤ by GitHub

+ 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 email nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

%d bloggers like this: