添加自定义字体时无法解析方法 getAssets()
Cannot resolve method getAssets() while adding custom font
我想将自定义字体添加到扩展 BaseAdapter 的适配器中的按钮 (LetterBtn),但我在 getAssets() 中收到错误消息 "cannot resolve method 'getAssets()'"。
字体在 assets/fonts/ 文件夹中,在我的另一个 Activity.
中可以正常使用
@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;
}
您可以从视图的上下文中获取资产。您应该考虑的另一种优化是将 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;
}
使用
context.getAssets()
在适配器中,它将工作。
Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd55 Roman.ttf");
试试这个:
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");
我认为您在 Adapter
class 中遇到了这个问题。更新您的 Adapter
class 如下:
....................
................................
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;
}
...................
.........................
}
只需在 getAssets(),
之前添加 context.
Typeface custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/font.ttf");
textView.setTypeface(custom_font);
我想将自定义字体添加到扩展 BaseAdapter 的适配器中的按钮 (LetterBtn),但我在 getAssets() 中收到错误消息 "cannot resolve method 'getAssets()'"。
字体在 assets/fonts/ 文件夹中,在我的另一个 Activity.
中可以正常使用@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;
}
您可以从视图的上下文中获取资产。您应该考虑的另一种优化是将 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;
}
使用
context.getAssets()
在适配器中,它将工作。
Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd55 Roman.ttf");
试试这个:
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");
我认为您在 Adapter
class 中遇到了这个问题。更新您的 Adapter
class 如下:
....................
................................
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;
}
...................
.........................
}
只需在 getAssets(),
之前添加 context.Typeface custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/font.ttf");
textView.setTypeface(custom_font);