将文本视图的字体设置为Typeface.NORMAL没有任何效果,为什么?

时间:2017-12-13 16:09:13

标签: android expandablelistview android-typeface

我有ExpandableListView的听众为群组折叠和展开:

// There is a text view on group layout, no problem there.
    @Override
    public void onGroupCollapse(int groupPosition) {
        // this callback is triggered, however, once the textView is BOLD by onGroupExpanded, the textView is not set back to normal, seems this line of code does nothing...WHY?
        textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);
    }

    @Override
    public void onGroupExpand(int groupPosition) {
        // it works fine
        textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
    }

正如您在上面所看到的,我在群组布局中有textView,当群组展开时,我粗体 textView,如果已折叠,我会尝试设置它Typeface.NORMAL返回 unbold

两个回调都被正确触发,但是,textView BOLD onGroupExpanded(...)回调后,textView不是之后触发onGroupCollapse(...)时重新设置为NORMAL。似乎onGroupCollapsed(...)中的代码行什么都不做......为什么?

(同样,onGroupCollapse(...)被触发。没问题!)

2 个答案:

答案 0 :(得分:5)

如果您在此TextView上使用android:fontFamily,那么我很确定

textView.setTypeface(null, Typeface.NORMAL);

将更改为默认字体。另一种方法是:

textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL));

最初的问题是,如果样式为NORMAL,则具有样式的TextView的setTypeface会跳过某些内容。我已经在一个版本上进行了测试,并且可以正常工作。

答案 1 :(得分:4)

请改用:

textView.setTypeface(null, Typeface.NORMAL);

你需要把null放在其他字体上(在你的情况下是Bold)。我如何理解它一个文本视图可以有多种类型的面,例如斜体+粗体等,第一个参数是指示是否要保留这些。所以基本上你以前的代码保持BOLD并添加了NORMAL,并且BOLD赢了;-)

另请参阅此处的相关答案和评论https://stackoverflow.com/a/6200841/2399024