Настройка счетчика панели действий

Я пытаюсь настроить скриншот actionbar для Android так, как приложение google currents. В принципе, только «субтитры» должны отражать то, что я выбираю из счетчика, в то время как «название» остается неизменным. Я понимаю, что пользовательский счетчик должен быть создан, и я должен переопределить метод getView() и getDropDownView() . Но я очень смущен здесь, как правильно переопределить эти методы. Может кто-то подтолкнуть меня в правильном направлении. Надеюсь, я поставил свой вопрос ясным.

Снимок экрана http://androidcowboy.com/wp-content/uploads/2012/12/google-currents-3a.jpg

Ниже приведен мой код.

 public class CustomSpinnerAdapter extends BaseAdapter { private LayoutInflater inflater; private final Context context; private final String[] dropDown; private final String mainText; private final String subText; public CustomSpinnerAdapter(Context context, String mainText, String subText,String[] dropDown) { inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.mainText=mainText; this.subText=subText; this.context = context; this.dropDown=dropDown; } @Override public int getCount() { // TODO Auto-generated method stub return 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View actionBarView = inflater.inflate(R.layout.custom_spinner, null); TextView textView = (TextView) actionBarView .findViewById(R.id.custom_spinner_textview); textView.setText(mainText); return actionBarView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View dropDownView = inflater.inflate(R.layout.custom_spinner, null); TextView dropDownTextView = (TextView) dropDownView .findViewById(R.id.custom_spinner_dropdown_textview); dropDownTextView.setText(dropDown[position]); return dropDownView; } } 

Solutions Collecting From Web of "Настройка счетчика панели действий"

Я решил это.

Список моего класса адаптера:

 public class AdapterBaseMaps extends BaseAdapter { Context context; int layoutResourceId; ArrayList<ObjectLayers> data; LayoutInflater inflater; public AdapterBaseMaps(Context context, int textViewResourceId, ArrayList<ObjectLayers> data) { // super(a, textViewResourceId, data); this.data = data; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.context = context; this.layoutResourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { View actionBarView = inflater.inflate(R.layout.ab_main_view, null); TextView title = (TextView) actionBarView .findViewById(R.id.ab_basemaps_title); TextView subtitle = (TextView) actionBarView .findViewById(R.id.ab_basemaps_subtitle); title.setText(context.getResources() .getString(R.string.label_cartravel)); subtitle.setText(data.get(position).getLayerName()); return actionBarView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View actionBarDropDownView = inflater.inflate( R.layout.ab_dropdown_view, null); TextView dropDownTitle = (TextView) actionBarDropDownView .findViewById(R.id.ab_basemaps_dropdown_title); dropDownTitle.setText(data.get(position).getLayerName()); return actionBarDropDownView; } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } 

Список ab_main_view.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/ab_basemaps_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="20sp" android:textColor="@color/White" /> <TextView android:id="@+id/ab_basemaps_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/ab_basemaps_title" android:text="TextView" android:textColor="@color/White" android:textSize="13sp" /> </RelativeLayout> 

Список ab_dropdown_view.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/ab_basemaps_dropdown_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="20sp" android:padding="5dp" android:textColor="@color/White" /> </RelativeLayout> 

Первый ответ полезен, но подкласс Adapter не нужен.

Определите XML, как в ответе @ user1624587, а затем просто ссылайтесь на него в public boolean onCreateOptionsMenu(Menu menu) :

  ArrayAdapter<CharSequence> someAdapter = new ArrayAdapter<CharSequence>(context, R.layout.ab_main_view, android.R.id.text1, getResources().getStringArray(R.array.some_array)); someAdapter.setDropDownViewResource(R.layout.ab_dropdown); MenuItem item = menu.add("SomeTitle").setActionView(R.layout.some_spinner); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //or whatever someSpinner = (someSpinner) item.getActionView(); someSpinner.setAdapter(someAdapter); ...etc