我正在使用下拉菜单,我只在其中放入一个字符串,但我想在我点击下拉菜单小部件上的操作栏时,当选项列表下降时,我将看到的不仅仅是字符串,而是每个选择,我试图查找它,但我没有找到相关的如何做到这一点。 我所说的是这个例子 http://2.bp.blogspot.com/-mVQddiSMz0I/TzL2y2Ny5uI/AAAAAAAABKo/ikNPtWiPu4w/s1600/Screenshot_2012-02-08-14-01-21.png那么,你能给我一个例子和解释吗? 感谢
答案 0 :(得分:0)
使用ActionBar,请参阅此文档:
ShareActionProvider是ActionProvider的扩展,它通过显示操作栏中的可用共享目标列表来促进“共享”操作。
使用ActionProvider,您可以添加菜单,并可以创建自定义菜单项。 这里有如何创建菜单项xml文档:
参见示例:menu with photo
这里有如何为ShareIntent添加图标流的意见: ShareActionProvider with one icon - looking as simple actionitem
答案 1 :(得分:0)
您的屏幕截图是ListPopupWindow
使用的ShareActionProvider
。
答案 2 :(得分:0)
如果您不需要使用ShareActionProvider
,只需使用带有图片和文字的Spinner
,则可以在操作栏中添加子菜单,如下所示:
https://stackoverflow.com/a/8312985/626787
或者您可以添加Spinner
作为操作,并使用CustomAdapter
填充。
答案 3 :(得分:0)
正如@mbarrben所说,你不需要ShareActionProvider
。您只需要一个Spinner并实现CustomAdapter。您可以在下面看到一个简单示例(Full example here
在您的活动中,您应该拥有:
public class SpinnerIconActivity extends SherlockActivity implements OnNavigationListener{
private SpinnerAdapter mSpinnerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_icon);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
List<SpinnerRow> options = new ArrayList<SpinnerRow>();
options.add(new SpinnerRow("Droid 1", R.drawable.android01));
options.add(new SpinnerRow("Droid 2", R.drawable.android02));
options.add(new SpinnerRow("Droid 3", R.drawable.android03));
mSpinnerAdapter = new MySpinnerAdapter(getApplicationContext(),
R.layout.spinner_row, R.id.text, options);
actionBar.setListNavigationCallbacks(mSpinnerAdapter, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
return false;
}
}
最重要的是编写自定义适配器。我选择使用ArrayAdapter因为使用它我只需要覆盖一个方法。
编写customAdapter的方法与创建具有一个基本区别的可自定义ListView相同,而不是覆盖getView方法,您必须覆盖getDropDownView 。
所以,下面是我的例子:
public class MySpinnerAdapter extends ArrayAdapter<SpinnerRow> {
private List<SpinnerRow> rows;
private int resource;
public MySpinnerAdapter(Context context, int resource,
int textViewResourceId, List<SpinnerRow> objects) {
super(context, resource, textViewResourceId, objects);
rows = objects;
this.resource = resource;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(resource,
parent, false);
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
SpinnerRow currentRow = rows.get(position);
holder.text.setText(currentRow.toString());
holder.icon.setImageDrawable(
getContext().getResources().getDrawable(currentRow.getIconResourceId()));
return convertView;
}
}
答案 4 :(得分:0)
请参阅google =&gt;提供的链接。 http://developer.android.com/guide/topics/ui/actionbar.html#ActionProvider