2012-06-19 35 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

非常感謝你,有用的細節。 –