2013-06-23 42 views
4

我用setTypeface設置粗體文字(或斜體或其他字體的屬性)從TextView中不改變其他屬性

TextView tv = findViewById(R.id.label); 
... 
tv.setTypeface(null,Typeface.BOLD); 
... 

如何刪除只有大膽的屬性,不改變其他屬性刪除粗體這可能是迄今爲止設定的?

回答

9
tv.setTypeface(null,Typeface.NORMAL); 

這會將樣式設置恢復到正常狀態而不更改顏色或大小。

但是,您不能以這種方式混合粗體/斜體/下劃線文本。如果您指定BOLD,則所有文本都將變爲粗體。如果你想混合文本的風格,我建議使用HTML來設置文本的樣式,然後使用下面的代碼。

tv.setText(Html.fromHtml(yourStringAsHtml)); 
+0

我想到了'Html.fromHtml()'爲好,但是這使得切換粗體斜體和下劃線seperatly相當困難的,不是嗎? – user1555863

+0

這不是直接的,但我不相信你有另一種選擇,因爲文本樣式是針對TextView中的所有文本的。根據你想要做的事情,你可以修改你的佈局,併爲粗體/下劃線/斜體分別提供不同的視圖,但這隻適用於非常靜態的用例。 – Flynn81

+0

@ Flynn81這就是我所做的,如果我設置了BOLD_ITALIC或BOLD並且想要關閉BOLD部分,我必須知道文本的當前狀態,除非獲得字體並詢問'isBold()','isItalic ()' – ilomambo

0

這個塊的代碼刪除舊的字樣setTypeface(NULL,Typeface.NORMAL);

爲了保持舊的你應該叫

setTextViewStyle(TextView的,isBold);

private void setTextViewStyle(TextView view, boolean isBold){ 
    if (view == null) 
     return; 

    // if old typeface is null create new Typeface bold or def 
    Typeface oldTypeface = view.getTypeface() != null ? view.getTypeface() : 
      (isBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); 

    view.setTypeface(
      Typeface.create(oldTypeface, isBold ? Typeface.BOLD : Typeface.NORMAL) 
    ); 
}