【问题标题】:Setting the dropdown for the action bar item设置操作栏项目的下拉菜单
【发布时间】:2012-12-14 08:29:40
【问题描述】:

我正在通过以下代码设置操作栏和项目,并显示相应的 image1。当用户单击显示书签屏幕操作项时,它会转到其他活动。在该活动中,我希望在 SHOW BOOKMARK SCREEN 的位置显示另一个项目(SELECT BOOKMARK TYPE)。因此,我正在考虑通过将相应的事物设置为 true 或 false 来使用抽象类来管理它,如下所示。但现在我无法得到两件事。

1)如何区分两个操作项的情况0?因为我正在用另一个替换操作项。

2)如何获取 SELECT BOOKMARK TYPE 的下拉菜单,如 图 2 所示。

看过几篇文章,但由于我对 android 有点陌生,我无法理解并通过将额外代码添加到我目前的代码来完成它。你能帮我解决这个问题吗?代码 sn-ps 表示赞赏。提前致谢。

public abstract class ActionActivity extends SherlockActivity {
    protected boolean mIsShowBookmarkScreen = true;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

         if(mIsShowBookmarkScreen)
         {
             menu.add("SHOW BOOKMARK SCREEN")
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         }

         else 
         {
             menu.add(SELECT BOOKMARK TYPE);
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
         }

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //This uses the imported MenuItem from ActionBarSherlock
        switch(item.getItemId())
        {

        case 0:
            Intent intent = new Intent(ActionActivity.this,BookmarkScreen.class);
            startActivity(intent);
            return true;
        }
        return false;
    }

     @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            getSupportActionBar().setHomeButtonEnabled(true);
        }

}

图片 1:

图片 2:

至少有人可以帮助实现第二个。我对第一个问题有了一个想法。

【问题讨论】:

    标签: android android-actionbar actionbarsherlock dropdownbox


    【解决方案1】:

    1) 使用instanceof进行区分。

    if (this instanceof ActivityA) {
        // start Intent A
    } else if (this instanceof ActivityB) {
        // start Intent B
    }
    

    2) 添加Spinner 作为自定义ActionView

    <string-array name="items">
        <item>SELECT BOOKMARK TYPE</item>
        <item>TYPE-1</item>
        <item>TYPE-2</item>
        <item>TYPE-3</item>
    </string-array>
    
    MenuItem spinnerItem = menu.add(null);
    spinnerItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    IcsSpinner spinner = new IcsSpinner(this, null);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.items, R.layout.sherlock_spinner_item);
    adapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));
    spinnerItem.setActionView(spinner);
    

    请注意,我在这里使用私有 IcsSpinner 来在 SDK 版本 answer。

    如果您想进一步自定义Spinner,您可能需要创建自己的Adapter

    【讨论】:

    • +1 感谢您的宝贵时间。您能告诉我如何更改操作项的背景颜色吗?正如您在我的图片 1 中看到的,操作项(显示书签屏幕)的区别是不可见的,因为整个背景颜色是相同的。即使是第二张图像也是如此。请帮忙。
    • spinner.setBackgroundColor(Color.RED)。但我宁愿通过spinner.setBackgroundResource(resid) 设置背景,其中resid 是背景颜色的选择器。
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多