【问题标题】:Android: Textview cannot be unbolded/italcizedAndroid:Textview不能加粗/斜体
【发布时间】:2017-02-17 04:47:43
【问题描述】:

TextView 显示在一个活动中,用户转到另一个活动以编辑文本的属性,例如颜色、大小、粗体、斜体和下划线。当用户选择使文本变为粗体、斜体或粗体斜体时,它会起作用。如果用户取消选中该复选框,则 TextView 不会恢复正常。它可以在样式之间切换(即,如果我选中粗体,然后取消选中粗体并选中斜体,TextView 将是斜体,而不是粗体),但它不能具有正常的 TypeFace。

我四处搜索,我发现的所有内容都表明使用带有 Typeface.NORMAL 的 setTypeface 方法应该可以工作,但它不起作用。

我希望能在解决这个问题上提供一些帮助。相关代码如下。谢谢!

    TextView mDisplayMessage = (TextView) findViewById(R.id.message);
    mDisplayMessage.setTypeface(mDisplayMessage.getTypeface(), Typeface.NORMAL);
    //TODO: Cannot return all the way back to normal. Remains bold/italic/bold_italic
    if (mIsBold && mIsItalic) mDisplayMessage.setTypeface(mDisplayMessage.getTypeface(), Typeface.BOLD_ITALIC);
    else if (mIsBold) mDisplayMessage.setTypeface(mDisplayMessage.getTypeface(), Typeface.BOLD);
    else if (mIsItalic) mDisplayMessage.setTypeface(mDisplayMessage.getTypeface(), Typeface.ITALIC);
    else mDisplayMessage.setTypeface(mDisplayMessage.getTypeface(), Typeface.NORMAL);
    if (mIsUnderlined) {
        mDisplayMessage.setPaintFlags(mDisplayMessage.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    } else {
        mDisplayMessage.setPaintFlags(0);
    }

【问题讨论】:

    标签: android textview android-typeface


    【解决方案1】:

    如果您不关心字体系列,您可以使用

    mDisplayMessage.setTypeface(Typeface.DEFAULT);

    因为Typeface.DEFAULT改变了字体系列(serif, sans-serif, monospace),但是下面可以保持相同的字体系列改变了样式。

    Typeface typeface = mDisplayMessage.getTypeface();
    int style = Typeface.NORMAL;
    if(mIsBold && mIsItalic) {
        style = Typeface.BOLD_ITALIC;
    } else if(mIsBold) {
        style = Typeface.BOLD;
    } else if(mIsItalic) {
        style = Typeface.ITALIC;
    }
    Typeface newTypeface = Typeface.create(typeface, style);
    mDisplayMessage.setTypeface(newTypeface);
    

    【讨论】:

      【解决方案2】:

      试试这个,

       mDisplayMessage.setTypeface(Typeface.DEFAULT);
      

       mDisplayMessage.setTypeface(null, Typeface.NORMAL);  
      

      【讨论】:

      • mDisplayMessage.setTypeface(Typeface.NORMAL);产生编译错误但 mDisplayMessage.setTypeface(Typeface.DEFAULT);确实有效!非常感谢!
      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      相关资源
      最近更新 更多