首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >actionbar外的下拉式微调器?(IceCream三明治风格,带《神探夏洛克》)

actionbar外的下拉式微调器?(IceCream三明治风格,带《神探夏洛克》)
EN

Stack Overflow用户
提问于 2012-04-26 04:44:36
回答 2查看 6.9K关注 0票数 12

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

下面是我的意思的一个例子:

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 05:18:00

现在看来,你已经很幸运了。它可以在ActionBarSherlock上完成,也可以在4.0之前的版本中使用。然而,我不能百分百肯定杰克·沃顿会希望我们这样使用它,因为它不是真正的“公共api",AFAIK (我的意思是问)。无论如何,您必须首先创建您自己的类,以从ActionBarSherlock类扩展:

代码语言:javascript
复制
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);

  }
}

要将其包含在布局中,请执行以下操作:

代码语言:javascript
复制
<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"/>

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

代码语言:javascript
复制
@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,尤指关于主题。

票数 26
EN

Stack Overflow用户

发布于 2013-05-17 20:01:52

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

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

代码语言:javascript
复制
@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;
}

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

它起作用了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10323471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档