在ActionBar中获取对Spinner的引用

时间:2014-07-23 08:34:48

标签: android android-spinner

当您需要查找布局中的任何UI元素时,

findViewById()可以正常工作。但是,使用此回答How to add a Dropdown item on the action bar的第二个选项,我向Spinner添加了ActionBar

现在我面临的问题是如何检索对此Spinner的引用,以便我可以更改它使用的字体。 我该怎么做?

我的 menu / sort_spinner 如下所示:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/sort" 
        android:showAsAction="always"
        android:title="@string/sort"
        android:actionLayout="@layout/actionbar_spinner"/>
</menu>  

layout / actionbar_spinner 就像这样:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:spinnerMode="dropdown"
    android:id="@+id/spinner"
    android:entries="@array/type" />

2 个答案:

答案 0 :(得分:1)

您必须在public boolean onCreateOptionsMenu(Menu menu)

中执行此操作
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.sort_spinner, menu);
    MenuItem spinnerItem = menu.findItem(R.id.sort);
    Spinner spinner = (Spinner)spinnerItem.getActionView().findViewById(R.id.spinner);
    //Your rest of code...
    return super.onCreateOptionsMenu(menu);
}

答案 1 :(得分:1)

onCreateOptionsMenu内,您可以保存菜单的全局引用,如下所示:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.actionbar_items, menu);
    mMenu = menu;
    ...
}

编辑:

要更改字体,您必须使用适配器。以下是 工作的示例。

MenuItem item = mMenu.findItem(R.id.sort);
Spinner spinner = (Spinner) item.getActionView().findViewById(R.id.spinner);

MyAdapter adapter = new MyAdapter(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

private class MyAdapter extends ArrayAdapter {

    public MyAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    public TextView getView(int position, View convertView, ViewGroup parent) {
        TextView v = (TextView) super.getView(position, convertView, parent);
        v.setTypeface(myFont);
        return v;
    }

    public TextView getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView v = (TextView) super.getView(position, convertView, parent);
        v.setTypeface(myFont);
        return v;
    }

}