2017-04-11 73 views
2

我想将自定义字体添加到扩展BaseAdapter的适配器中的按钮(LetterBtn),但getAssets()出现“无法解析方法”getAssets() “”。添加自定义字体时无法解析方法getAssets()

字体在资产/字体/文件夹中,它在我的其他活动中正常工作。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    Button letterBtn; 

    if (convertView == null) { 
     letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false); 
    } else { 
     letterBtn = (Button)convertView; 
    } 

    letterBtn.setText(letters[position]); 


Typeface font1 = Typeface.createFromAsset(getAssets(), 
"fonts/nexalight.otf"); 
letterBtn.setTypeface(font1); 

    return letterBtn; 

} 
+0

您是否在片段中使用此代码? – Boggartfly

+0

您可以请您发布完整的适配器类吗? – FAT

回答

2

我认为你是在你的Adapter类面临这样的问题。更新您的Adapter类如下:

.................... 
................................ 

public class YourAdapter extends ...... 
{ 
    ......... 
    .............. 

    Typeface font; 

    public YourAdapter(Context context, ...........) 
    { 
     super(context, ..........); 

     font = Typeface.createFromAsset(context.getAssets(), "fonts/nexalight.otf"); 
    } 

    ............... 
    ........................ 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     if (convertView == null) { 
      convertView = letterInf.inflate(R.layout.letter, parent, false); 
     } 

     Button letterBtn = (Button) convertView.findViewById(R.id.YOUR_BUTTON_ID); 

     letterBtn.setText(letters[position]); 
     letterBtn.setTypeface(font); 

     return convertView; 
    } 

    ................... 
    ......................... 
} 
+0

它的工作原理。谢谢! – prezli

0

您可以从视图的上下文中获取资产。您应该考虑的另一个优化是将Typeface保存在适配器级别,以便您可以重复使用它,而不是每次从文件加载它。

试试这个:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    Button letterBtn; 

    if (convertView == null) { 
     letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false); 
    } else { 
     letterBtn = (Button)convertView; 
    } 

    letterBtn.setText(letters[position]); 

    Typeface font1 = Typeface.createFromAsset(letterBtn.getContext().getAssets(), "fonts/nexalight.otf"); 
    letterBtn.setTypeface(betuTipus1); 

    return letterBtn; 

} 
1

使用

context.getAssets() 
适配器

,它会工作。

Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd55 Roman.ttf"); 
0

试试这个:

public class ButtonBold extends Button { 
    public ButtonBold(Context context) { 
     super(context); 
     setTypeface(); 
    } 

    public ButtonBold(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setTypeface(); 
    } 

    public ButtonBold(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     setTypeface(); 
    } 

    private void setTypeface() { 
     if(!isInEditMode()) { 
      setTypeface(Utils.BOLD_FACE); 
     } 
    } 
} 

Utils.BoldFace:

Typeface.createFromAsset(context.getAssets(), "OpenSans-LightItalic.ttf"); 
+0

并尝试另一种字体,可能是其中的问题。 – ins1der12111991