本文轉自:http://txlong-onz.iteye.com/blog/1142781
如圖,這個是桌面Widget中的截圖,最好是通過一個TextView實現,這是我提出的問題,近幾天解決。呵呵,當然寫兩個TextView很簡單也很容易設置。
- title.setText("Your big island <b>ADVENTURE!</b>");//這是原樣顯示,我想讓加粗
還有,我想能不能類似的給上邊那樣通過html標簽設置樣式。網上搜過,果然可以。
- {
- final SpannableStringBuilder sb = new SpannableStringBuilder("your text here");
- final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); // Span to set text color to some RGB value
- final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Span to make text bold
- sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // Set the text color for first 4 characters
- sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make them also bold
- yourTextView.setText(sb);
- }
另外android幫我們封裝了簡單的方法。
- title.setText(Html.fromHtml("Your big island <b>ADVENTURE!</b>"));
但是,我通過這個方法,在widget中設置,不太可行。又是個疑問了,但到在widget中通過html代碼設置字體大小不行么?
如果你經常的使用設置TextView中的字體,最好使用Spannable或SpannableBuilder之類的。網上說Html.fromHtml不是很高效,因為這是通過一個很大的xml來解析的。
我再試試Spannable
- TextView TV = (TextView)findViewById(R.id.mytextview01);
- Spannable WordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
- WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- TV.setText(WordtoSpan);
經過測試通過這種方法還是不能夠改變widget中的字體大小。
- Spannable WordtoSpan = new SpannableString("大字小字");
- WordtoSpan.setSpan(new AbsoluteSizeSpan(11), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- WordtoSpan.setSpan(new AbsoluteSizeSpan(21), 2, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- remoteViews.setCharSequence(R.id.text11, "setText", WordtoSpan.toString());
- ComponentName com = new ComponentName("com.jftt.widget", "com.jftt.widget.MyWidgetProvider");
- appWidgetManager.updateAppWidget(com, remoteViews);
經過我的修改終於成功了,原來試試自己使用錯誤啊。下邊是正確代碼。
- Spannable WordtoSpan = new SpannableString("大字小字");
- WordtoSpan.setSpan(new AbsoluteSizeSpan(20), 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- WordtoSpan.setSpan(new AbsoluteSizeSpan(14), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- remoteViews.setCharSequence(R.id.text11, "setText", WordtoSpan);
- ComponentName com = new ComponentName("com.jftt.widget", "com.jftt.widget.MyWidgetProvider");
- appWidgetManager.updateAppWidget(com, remoteViews);
相信對比可以看出我錯在哪里了吧!是的,我錯誤的使用了toString方法。
效果如圖: