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 😉
Zaczęłam od dorzucenia elementu do menu:
Później oprogramowałam kliknięcie na ten element – znaczy się, dołożyłam kolejny case do switcha 😉
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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ć.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 😉
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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!