2015-07-11 50 views
2

格式化我有設置一個TextView的文本驗證碼的<small>馬克工作從dimens.xml應用尺寸文本與Html.fromHtml

TextView txt = new TextView(this); 
txt.setText(Html.fromHtml("<b>" + m.getTitle() + "</b>" + "<br />" + "<small>" + m.getText() + "</small>" + "<br />"); 

,但我想設置文本大小根據在我的應用程序中用於所有其他文本的dimens.xml文件中定義的我的維度。通過XML佈局添加TextView的是不是一種選擇,因爲我不知道有多少TextViews將加入。

dimens.xml文件中的尺寸設置爲<dimen name="text_size_320dp_small">16sp</dimen>

如何將這些尺寸應用於我的文字格式爲Html.fromHtml

非常感謝。

+0

你爲什麼首先使用HTML進行呢?在垂直的'LinearLayout'中使用兩個'TextView'小部件。設置在每個'TextView'的'textSize',並設置在第一個的'textStyle'是'bold'。完成。如果你願意,可以創建自己的'TitleAndTextView'來擴展'LinearLayout',並將所有這些東西包裝在一個複合小部件中。 – CommonsWare

回答

1

您不能直接,小標籤創建與.8f的比例,這是硬編碼到的Html.fromHtml的實施RelativeSizeSpan

留下兩個選項,我可以看到,設置文本大小爲20sp(這將使小工作到16sp)。可能不理想。

另一種選擇是用<mySmall> & </mySmall>更換的<small></small>所有出現使用自定義標籤<mySmall>。然後撥打fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)TagHandler,將AbsoluteSizeSpan集成到輸出Editable中。

+0

我......恩......哇。我在執行'Html.TagHandler'時遇到了麻煩。我沒有采取必要的時間來充分發掘這個解決方案,但我沒有嘗試這個職位的接受的答案:http://stackoverflow.com/questions/4044509/android-how-to-use-the-html-taghandler並能真的不明白在哪裏使用'AbsoluteSizeSpan'以及如何使用。我會繼續努力,但如果你能提供一個片段或一些指針,我會比我更加感激。 – Blueriver

+0

所以,我可以成功實現這一點。現在需要以編程方式檢測屏幕寬度並根據它添加正確的標籤,但我的TagHandler處理標籤並獲取dimens.xml文件。謝謝!很多!! 雖然快速的問題:因爲我 – Blueriver

+0

看起來像您的評論昨天切斷,我可以幫忙嗎? – pturner

1

爲什麼不使用txt.setSizeText(yoursize)?但是你可以使用這個檢索您的尺寸:

float yourDimen = getResources().getDimension(R.dimen.your_dimen_name); 
+0

我不使用它,因爲它爲整個文本設置了大小,而不僅僅是它的一部分。我仍然會考慮使用多選文字的替代方法,儘管現在看起來很不切實際。謝謝您的回答! – Blueriver

3

我已經測試下面的代碼我自己。你可以這樣做。

txt.setText(Html.fromHtml("<b>" + m.getTitle() + "</b>" + "<br />" + "<font textsize=" + getResources().getDimension(R.dimen.text_size_320dp_small) + ">" + m.getText() + "</font>" + "<br />"));

+0

當我更改text_size_320dp_small中的值時(我已測試從16sp更改爲26sp),代碼不會改變文本大小。根據我在其他問題閱讀過的內容,字體標籤被'Html.fromHtml'忽略。你能告訴我它是否真的改變了你的文本大小,如果是,你定位的SDK版本是什麼,或者如果你使用常規的TextView,或者我們的代碼可能有其他差異?我可以向您提供完整的代碼,但我認爲您的代碼段較短,找到差異應該是我的工作。 謝謝。 – Blueriver

+0

@Bunhy:請注意,'textsize'屬性無處示出了在[源代碼到'Html'類(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/主/核心/ JAVA /安卓/文本/ Html.java)。 – CommonsWare

2

[更新]:

就想出了一些參考和更新:

您可以在此存儲的strings.xml

<string name="mystring">&lt;font size = &quot;%s&quot;&gt;</string> 

在你的代碼可以寫爲:

int sptopx = getResources().getDimensionPixelSize(R.dimen.text_size_320dp_small); 
Spanned modified = Html.fromHtml(context.getString(R.string.mystring, sptopx)); 
myTextView.setText(spanned); 

TextView txt = new TextView(this); 

     txt.setText(
     Html.fromHtml(
     "<b>" + m.getTitle() + "</b>" + 
     "<br />" + 
     modified + 
      ">" + m.getText() + "</font>" + 
      "<br />" 
      ) 
      ); 

有關HTML標籤在TextViews中的支持的詳細信息,您可以檢查this link

+0

可悲的是它沒有。 'Html.fromHtml'忽略字體標籤,所以尺寸不適用這種方式。不過,我很欣賞你的時間和精力。 – Blueriver