2012-10-21 92 views
1

我只想更改我的微調器文本的字體和大小。嘗試使用適配器自定義微調器

我做了一些初步嘗試。沒有什麼是崩潰的,但我的微調是空白的。 (我也還沒有實現自定義字體,我只是試圖讓微調第一工作

在代碼:

protected SpinnerSortAdapter sAdapter; 
    protected Spinner sort; 
    protected String[] strings; 

     sort = (Spinner) getActivity().findViewById(R.id.spinner2); 
     strings = getActivity().getResources().getStringArray(R.array.sorting_items); 
     SpinnerSortAdapter sAdapter = new SpinnerSortAdapter(getActivity(), 
       android.R.layout.simple_spinner_item, strings); 
     sAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     sort.setAdapter(sAdapter); 
     sort.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

適配器:

public class SpinnerSortAdapter extends ArrayAdapter<String> { 
public SpinnerSortAdapter(Context context, int textViewResourceId, 
     String[] strings) { 
    super(context, textViewResourceId, strings); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    if (view instanceof TextView) { 
     ((TextView) view).setTextSize(5); 
    } 
    return view; 
} 

public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    View row = super.getView(position, convertView, parent); 
    return (row); 
} 

} enter code here

+0

爲什麼不使用[Spin​​nerAdapter] [1]? [1]:http://developer.android.com/reference/android/widget/SpinnerAdapter.html – manelizzard

+1

*我的微調器是空白的*是什麼意思?如果你想改變微調器對話框中的文本,你必須實現'getDropdownView'。 – Luksprog

+0

主要是因爲我看到的大部分教程都使用了'ArrayAdapter'。我當然會使用任何作品! – KickingLettuce

回答

8

您沒有正確初始化適配器,您的版本ArrayAdapter需要兩個整數,一個指向該行的佈局文件,另一個int表示ng該佈局文件中的TextView小部件的標識。這個適配器將是空的。您的代碼應該是這樣的:

String[] items = getResources().getStringArray(R.array.sorting_items); 
SpinnerSortAdapter adapter = new SpinnerSortAdapter(getActivity(), android.R.layout.simple_spinner_item, items); 

而且適配器將被更改爲:

public class SpinnerSortAdapter extends ArrayAdapter<String> { 

    public SpinnerSortAdapter(Context context, int textViewResourceId, 
      String[] strings) { 
     super(context, textViewResourceId, strings); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     if (view instanceof TextView) { 
      ((TextView) view).setTextSize(5); 
     } 
     return view; 
    } 

    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     View row = super.getView(position, convertView, parent); 
     return (row); 
    } 
} 
+0

它一直告訴我刪除'項目匹配(上下文,整數) – KickingLettuce

+0

@KickingLettuce我已經更新了我的答案。 – Luksprog

+1

我給你一個upvote,因爲你提醒我使用'ArrayAadapter。createFromResource()'(另一種方式)在創建適配器時正確使用'R.array.name'。 – Sam

2

更方便,更快捷的路徑是自定義佈局你傳遞給你的適配器,而不是適配器本身:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.layout.spinner_item, R.array.sorting_items); 
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 

保存爲spinner_dropdown_item.xmlres/layout

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:ellipsize="marquee" 
    android:textSize="15sp"/> 

(我剛剛複製了simple_spinner_dropdown_item.xml並在底部添加了textSize屬性。您應該按照simple_spinner_item佈局進行操作。)

此方法速度更快,因爲您在運行時不會更改任何屬性。 XML是預處理的。雖然自定義適配器每次調用getView()getDropDownView()時都會更改字體和大小...

+0

看起來很簡單,但自定義字體呢? – KickingLettuce

+0

使用'fontFamily'屬性。如果您查看[TextView的文檔](http://developer.android.com/reference/android/widget/TextView.html),您可以找到一個列出每個XML屬性及其相應方法的表。 – Sam

+0

謝謝薩姆。我想過使用相同的'createFromResources'方法,但不能在普通的'TextView'中設置xml中的自定義字體(我可能會誤解,但'fontFamily'不適用於此)。 – Luksprog