2014-07-23 4 views
1

findViewById() 레이아웃에있는 UI 요소를 찾아야 할 때 잘 작동합니다. 그러나이 대답의 두 번째 옵션 인 How to add a Dropdown item on the action bar을 사용하여 ActionBarSpinner을 추가했습니다.ActionBar의 Spinner에 대한 참조를 얻으십시오

지금 제가 직면 한 문제는이 Spinner에 대한 참조를 검색하여 사용하는 글꼴을 변경할 수있는 방법입니다. 어떻게하면됩니까?

메뉴/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> 

레이아웃/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" /> 

답변

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); 
} 
+0

및 '활자체'? 커스텀 어댑터를 사용하지 않고있다 : –

+0

'findItem (R.id.sort)'에 대해 확실한가? 'R.id.spinner'가 아니어야겠습니까? –

+0

MenuItem을 스피너에 지정합니다. – Simas

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; 
    } 

} 
+0

이제 스피너 안에있는 텍스트의 '활자체'를 찾으십시오. 어떻게? :) –

+0

@LittleChild 업데이트 됨 – Simas

+0

어댑터를 피할 방법이 없습니까? :) –

관련 문제