4

我想實現使用android 4.0的片段。 我已經加入列表片段的三個項目在我DummyContent.java文件更改詳細片段上的列表片段的字體

static { 
    // Add 3 sample items. 
    addItem(new DummyItem("1", "Videos")); 
    addItem(new DummyItem("2", "Images")); 
    addItem(new DummyItem("3", "Story")); 
} 

這些視頻,圖片,故事正在出現上它的每個項目的點擊片段的左側顯示右詳細片段細節信息手邊。

我想改變這些列表視圖的字體,但問題是列表片段使用系統的TextView如下

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // TODO: replace with a real list adapter. 
    setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), 
      android.R.layout.simple_list_item_activated_1, 
      android.R.id.text1, DummyContent.ITEMS)); 
} 

這是不是讓我去申請字樣,以android.R.id.text1

請幫我

回答

8

一種方法是延長ArrayAdapter並重寫getView方法來獲得TextView的保持:

public class MyArrayAdapter<T> extends ArrayAdapter<T> { 

    public MyArrayAdapter(Context context, List<T> items) { 

     super(context, android.R.layout.simple_list_item_activated_1, android.R.id.text1, items); 
    } 

    public MyArrayAdapter(Context context, T[] items) { 

     super(context, android.R.layout.simple_list_item_activated_1, android.R.id.text1, items); 
    } 

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

     View view = super.getView(position, convertView, parent); 
     TextView textView = (TextView) view.findViewById(android.R.id.text1); 
     textView.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "font/segoeuil.tff")); 

     return view; 
    } 
} 

然後,您將設置您的適配器,如下所示:

setListAdapter(new MyArrayAdapter<DummyContent.DummyItem>(getActivity(), DummyContent.ITEMS); 
+0

感謝您的回答錯誤。我試過這個解決方案,但唯一的問題是它拋出'java.lang.RuntimeException:原生字體不能在''textView.setTypeface(Typeface.createFromAsset(getContext()。getAssets(),「font/segoeuil.tff 「)); '如果我評論這條線,那麼它的工作不帶字體。我無法找出問題 – Hemantwagh07

+0

請確保您的字體文件實際存在於assets/font/segoeuil.tff中,並且您沒有任何錯別字 –

+0

是。我檢查了,文件是存在於位置'assets/font/segoeuil.tff'.Active通過使用相同的字體我能夠更改詳細信息片段的字體。只有它不適用於列表片段 – Hemantwagh07

1

您可以使用您自己的自定義佈局而不是預定義的佈局 創建一個這樣的xml文件

<?xml version="1.0" encoding="utf-8"?> 
say your layout name be custom.xml 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/cust_view" 
    android:layout_width="match_parent" 
    android:textSize="12dp" 
    android:padding="6dp" 
    android:layout_height="wrap_content" /> 

你可以給你自己的字體,以此佈局。 比適配器設置這樣

setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), 
      R.layout.custom, 
      android.R.id.text1, DummyContent.ITEMS)); 

我希望這將有助於你

+0

我試過這個解決方案,但是有一個問題 'R.layout.custom.xml'不能用.xml工作,所以我刪除了.xml並添加爲'R.layout.custom',因此它不會顯示任何錯誤。 但它崩潰的應用程序 – Hemantwagh07

+0

嘿抱歉,我們不應該包括.xml它只是一個輸入錯誤...什麼是你正在得到的異常請提及,也不需要第三個參數setListAdapter(new ArrayAdapter ( getActivity(), R.layout.custom,DummyContent.ITEMS)); – Pragnani

+0

是現在,它正在改變字體大小按照'custom.xml' 但是當我試圖設置字體爲 'TextView tv =((TextView)findViewById(R.id.cust_view)); \t \t字樣TF =字樣 \t \t \t \t .createFromAsset(getAssets(), 「字體/ segoeuil.ttf」); \t \t tv.setTypeface(tf); \t \t setListAdapter(新ArrayAdapter (getActivity(),R.layout.custom,DummyContent.ITEMS));' 然後它示出了用於'findViewById'和'getAssets' – Hemantwagh07