12

有没有办法为 Android 2.3.3 创建下拉微调器?我正在使用 ActionbarSherlock。

这是我的意思的一个例子:

在此处输入图像描述

谢谢

4

2 回答 2

26

就目前而言,你很幸运。它可以使用 ActionBarSherlock 完成,并且适用于 4.0 之前的版本。但是,我不能 100% 确定 Jake Wharton 会希望我们这样使用它,因为它不完全是“公共 api”,AFAIK(我本来想问的)。无论如何,您必须首先创建自己的类来扩展 ActionBarSherlock 类:

public class MyIcsSpinner extends IcsSpinner {

  public MyIcsSpinner(Context context, AttributeSet attrs) {
    super(context, attrs, com.actionbarsherlock.R.attr.actionDropDownStyle);

  }

  public MyIcsSpinner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

  }
}

要将其包含在布局中:

<com.blah.blah.blah.MyIcsSpinner
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:textAllCaps="true"
    android:background="@drawable/abs__spinner_ab_holo_light"
    android:textColor="#000000"
    android:gravity="center"/>

现在您必须创建一个 custom SpinnerAdapter,并且您需要覆盖以下方法以获得正确的外观:

@Override
  public View getView(int position, View convertView, ViewGroup parent) {
    final TextView filterName;
    if (convertView == null) {
      filterName = (TextView) layoutInflater.inflate(R.layout.filter_item, parent, false);
    } else {
      filterName = (TextView) convertView;
    }

    filterName.setText(getItem(position));
    return filterName;
  }

  @Override
  public View getDropDownView(int position, View convertView, ViewGroup parent) {
    final TextView filterName;
    if (convertView == null) {
      filterName = (TextView) layoutInflater.inflate(R.layout.sherlock_spinner_dropdown_item, parent, false);
      filterName.setEllipsize(TruncateAt.END);
    } else {
      filterName = (TextView) convertView;
    }

    filterName.setText(getItem(position));
    return filterName;
  }

YMMV,特别是。关于主题。

于 2012-04-25T21:17:59.917 回答
1

我遇到了同样的问题,我的解决方案很简单。(我没有使用 HoloEverywhere。)

这个想法来自 ABS 示例项目,它的下拉菜单也可以通过使用子菜单显示在 4.0 之前的设备上。所以,我的想法是使用子菜单来伪装 3 点图标。这是代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    SubMenu sub = menu.addSubMenu("More");
    sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    sub.getItem().setIcon(R.drawable.ic_menu);

    getSupportMenuInflater().inflate(R.menu.activity_main, sub);

    return true;
}

由于“更多”菜单没有 MenuItem.SHOW_AS_ACTION_WITH_TEXT 属性,因此“更多”(或您命名的任何名称)实际上不会显示在操作栏上。唯一显示的图标 R.drawable.ic_menu 可以从名为“abs__ic_menu_moreoverflow_normal_holo_dark.png”的 ABS 源代码 res/drawable-xxdpi 文件夹中复制,也就是所谓的 3 点图标。而 R.menu.activity_main 是您的菜单 xml。

有用!

于 2013-05-17T12:01:51.643 回答