我正在尝试将android actionbar微调器自定义为类似google current应用程序的东西。基本上,只有'副标题'应该反映我从旋转器中选择的内容,而'标题'保持不变。我知道需要创建自定义微调器,我必须覆盖getView()
和getDropDownView()
方法。但我在这里非常困惑如何正确地覆盖这些方法。有些人可以在正确的方向上推动我。我希望我明白我的问题。
the image screenshot 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;
}
}
答案 0 :(得分:17)
我解决了。
我的适配器类列表:
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>
答案 1 :(得分:2)
第一个答案很有帮助,但不需要Adapter子类。
在@ user1624587的答案中定义XML,然后在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