2012-06-19 34 views
1

嗨我正在尝试更改TextView的字体样式。我知道如何改变它,我在使用下面的代码之前完成了这个工作。文字视图中的Android设置字体

public class Main_Activity extends ListActivity { 
    Typeface myNewFace = Typeface.createFromAsset(getAssets(), 
      "fonts/bediz__.ttf"); 
    private CustomListAdapter adap; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    adap = new CustomListAdapter(this); 
    setListAdapter(adap); 
} 
    public static class CustomListAdapter extends BaseAdapter implements 
     Filterable { 
      public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     textView.setText(prayers[position]); 
     holder.textLine.setTypeface(myNewFace); 
      } 
} 

一些我跳过,因为没有必要,通过当我访问myNewFacegetView()它问我让它static方式的代码,当我让static这样

static Typeface myNewFace = Typeface.createFromAsset(getAssets(),"fonts/bediz__.ttf"); 

的它给了我下面的错误

Cannot make a static reference to the non-static method getAssets() from the type ContextWrapper 

我不知道该怎么做,我做这项工作前几次,但现在我不知道为什么我没有工作。

回答

2

你只是做这个

static Typeface myNewFace = Typeface.createFromAsset(context.getAssets(),"fonts/bediz__.ttf"); 

哪里背景应该是被makinng调用适配器类的上下文。

+3

由于这是一个静态初始值设定项,所以没有'context'对象可以使用。 – CommonsWare

+1

非常感谢你,它的工作。我会在7分钟后接受你的回答 –

+0

@ user1420026很高兴知道它对你有用。如果你愿意,你也可以放心。 – Akram

1

这是因为你已经宣布你inner classstatic;使您inner class顶级嵌套类,不再成员nested class;因此,你不能访问任何不再有任何的outer classnon-static member不通过参考第一要实例化目的。

对于non-static inner class,当创建inner classobject时,对外部对象的(隐藏)引用始终传递;因此可以访问外部的所有成员object/class。对于static inner class,此参考不通过。

对于您的示例,您可以使用对创建新的CustomListAdapter对象时显式传递的外部对象的引用:“adap = new CustomListAdapter(this);”,但更好的解决方案可能是将此静态关键字从内部类定义中删除。您不需要再传递对外部对象的引用。

+0

非常感谢你,有用的细节。 –