Ju nuk keni nevojë të përdorni fromHtml
. Unë kam pasur probleme me fromHtml
në të kaluarën (kur ajo që shfaq vjen nga përdoruesi, injektimi i kodit mund të rezultojë në gjëra të shëmtuara). Gjithashtu, nuk më pëlqen vendosja e elementeve të formatimit në strings.xml
(nëse përdorni shërbime për përkthim, ato mund të prishin etiketat tuaja HTML).
Metoda addLine
, si shumica e metodave për të vendosur tekstin në njoftime (setTicker
, setContentInfo
, setContentTitle
, etj.) marrin një parametër CharSequence
.
Kështu që ju mund të kaloni një Spannable
. Le të themi se dëshironi "Bold këtë dhe italic atë.", mund ta formatoni në këtë mënyrë (natyrisht, mos i kodoni pozicionet e forta):
Spannable sb = new SpannableString("Bold this and italic that.");
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 14, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
inboxStyle.addLine(sb);
Tani nëse keni nevojë të ndërtoni vargun në mënyrë dinamike me vargje të lokalizuara, si p.sh. "Sot është [DITA], mirëmëngjes!", vendosni vargun me një mbajtës vendi në strings.xml
:
<string name="notification_line_format">Today is %1$s, good morning!</string>
Pastaj formatoni në këtë mënyrë:
String today = "Sunday";
String lineFormat = context.getString(R.string.notification_line_format);
int lineParamStartPos = lineFormat.indexOf("%1$s");
if (lineParamStartPos < 0) {
throw new InvalidParameterException("Something's wrong with your string! LINT could have caught that.");
}
String lineFormatted = context.getString(R.string.notification_line_format, today);
Spannable sb = new SpannableString(lineFormatted);
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), lineParamStartPos, lineParamStartPos + today.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
inboxStyle.addLine(sb);
Do të marrësh "Sot është E diel, mirëmëngjes!", dhe me sa di unë funksionon me të gjitha versionet e Android.
09.02.2014