首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多次时,TypeFace无法工作

使用多次时,TypeFace无法工作
EN

Stack Overflow用户
提问于 2017-11-22 12:44:29
回答 3查看 376关注 0票数 1

我的设计:

看看下面的android代码:

代码语言:javascript
复制
final ArrayList<String> arrayFont = new ArrayList<String>();
    arrayFont.add("Arial");
    arrayFont.add("Segoeui");
    arrayFont.add("Tahoma");
    arrayFont.add("Times New Roman");
    ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,arrayFont);
    sp.setAdapter(arrayAdapter);
    sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(position == 0){
                Typeface type = Typeface.createFromAsset(getAssets(),"fonts/arial.ttf");
                txtkq.setTypeface(type);
            }
            if(position == 1){
                Typeface type = Typeface.createFromAsset(getAssets(),"fonts/segoeui.ttf");
                txtkq.setTypeface(type);
            }
            if(position == 2){
                Typeface type = Typeface.createFromAsset(getAssets(),"fonts/tahoma.ttf");
                txtkq.setTypeface(type);
            }
            if(position == 3){
                Typeface type = Typeface.createFromAsset(getAssets(),"fonts/times.ttf");
                txtkq.setTypeface(type);
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

 protected void Checked(View v){
    if(cb_Bold.isChecked() && cb_Italic.isChecked() == false) {
        Typeface bold_Typeface = Typeface.defaultFromStyle(Typeface.BOLD);
        txtkq.setTypeface(bold_Typeface);
    }else
    if(cb_Italic.isChecked() && cb_Bold.isChecked() == false){
        Typeface Italic_Typeface = Typeface.defaultFromStyle(Typeface.ITALIC);
        txtkq.setTypeface(Italic_Typeface);
    } else
    if(cb_Bold.isChecked() && cb_Italic.isChecked()){
        Typeface bold_Italic_Typeface = Typeface.defaultFromStyle(Typeface.BOLD_ITALIC);
        txtkq.setTypeface(bold_Italic_Typeface);
    }else
    if(cb_Bold.isChecked() == false && cb_Italic.isChecked() == false){
        Typeface bold_Italic_Typeface = Typeface.defaultFromStyle(Typeface.NORMAL);
        txtkq.setTypeface(bold_Italic_Typeface);
    }
}

当我单击“更改字体”时,它是工作的,然后单击“将字体样式更改为Bold”或“意大利语”,它将返回到默认字体:(在onCreate中用旋转器更改字体,在onCreate之外用复选框更改字体样式。选中的是XML中复选框的onClick事件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-22 13:08:17

这是因为您选择字体或字体的每一个类型,您都在视图中添加新类型的面板。试试下面的代码

代码语言:javascript
复制
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

当您正在更改文本样式时,还可以获得文本视图的当前类型,并使用新类型face传递。希望这能回答问题。

票数 0
EN

Stack Overflow用户

发布于 2017-11-22 13:21:59

请试试这个..。

代码语言:javascript
复制
protected void Checked(View v){
        CheckBox checkBox = (CheckBox)v;
        if(checkBox.isChecked()) {
            Typeface bold_Typeface = Typeface.defaultFromStyle(Typeface.BOLD);
            editText.setTypeface(bold_Typeface);
        } else {
            Typeface bold_Italic_Typeface = Typeface.defaultFromStyle(Typeface.NORMAL);
        editText.setTypeface(bold_Italic_Typeface);
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2017-11-22 13:33:09

请参见setTypeface方法的定义。如果您没有传递字体(字体),它会将默认的字体应用于它。风格基本上是你想要的textStyle,比如粗体,斜体。因此,在设置您的样式时,您也应该按照上面的建议传递您的字体。

代码语言:javascript
复制
public void setTypeface(Typeface tf, int style) {
        if (style > 0) {
            if (tf == null) {
                tf = Typeface.defaultFromStyle(style);
            } else {
                tf = Typeface.create(tf, style);
            }
}

所以你应该试试下面的代码:

代码语言:javascript
复制
Typeface ft=textview.getTypeface();
textview.setTypeface(ft, Typeface.BOLD);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47435084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档