Skip to content Skip to sidebar Skip to footer

Use Spannablestring In Android Home Screen Widgets?

Can I use SpannableStrings in a widget's textView? I tried and all it rendered was plain text. I don't know if it is something I'm doing wrong (most likely), or if it just isn't po

Solution 1:

If you would like to display formatted text in a TextView, use fromHtml

Solution 2:

String urlink = "http://www.google.com";
String link = "<a href=\"+urlink+ >link</a>"; 
textView.setText(Html.fromHtml(link));

Solution 3:

you can easily set Spannable String in widget. what I did is I used SpannableStringBuilder as set it to remoteView's textView.

  views.setTextViewText(R.id.rsTV, WidgetUtils.setPriceSpannableHomeScreenString(currentUserBalance.balance, context))


funsetPriceSpannableHomeScreenString(price: String, context: Context?): SpannableStringBuilder {

    val builder = SpannableStringBuilder()

    if (AppClass.hasValue(price) && context != null) {

        val st = StringTokenizer(price.trim { it <= ' ' }, ".") //pass dot as delimeterval balanceArrayList = ArrayList<String>()

        //iterate through tokenswhile (st.hasMoreTokens()) {
            balanceArrayList.add(st.nextToken("."))
        }

        val priceRsText = context.getString(R.string.rs)
        var priceBeforeDecimal = ""var priceAfterDecimal = ""if (balanceArrayList.size > 0) {

            if (balanceArrayList.size > 0 && balanceArrayList.get(0) != null) {
                priceBeforeDecimal = balanceArrayList.get(0)
            }

            if (balanceArrayList.size >= 2 && balanceArrayList.get(1) != null) {
                priceAfterDecimal = balanceArrayList.get(1)
            }

        }

        val firstValue = "$priceRsText.$priceBeforeDecimal."val lastValue = priceAfterDecimal


        val txtSpannable = SpannableString(firstValue)
        val boldSpan = StyleSpan(Typeface.BOLD)
        txtSpannable.setSpan(RelativeSizeSpan(1.5f), 0, firstValue.length, 0) // set size
        txtSpannable.setSpan(boldSpan, 0, firstValue.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        builder.append(txtSpannable)
        builder.append(lastValue)
        // priceSpannableTextView.setText(builder, TextView.BufferType.SPANNABLE)return builder
    }

    return builder
}

Solution 4:

Update 2020 Html.fromHtml is deprecated in Android N

Use HtmlCompat.fromHtml for better compatibility

Example setting Bold text with HTML

 setTextViewText(
                  R.id.wind, HtmlCompat.fromHtml(
                            "<b>Wind:</b>"+ windSpeedKmh+"<br/>"+
                            "<b>Direction:</b>" +windDirection
                       , HtmlCompat.FROM_HTML_MODE_LEGACY)
                    )

Post a Comment for "Use Spannablestring In Android Home Screen Widgets?"