用不确定的ProgressBar替换ActionBar菜单项图标

时间:2011-08-22 02:49:38

标签: java android android-3.0-honeycomb android-actionbar

我想在Honeycomb ActionBar中添加一个不确定的进度条,这样每当用户按下“刷新”时,刷新图标会暂时变为不确定的进度条,直到任务完成。电子邮件应用程序已经执行此操作,但我无法弄清楚如何。

有什么建议吗?

6 个答案:

答案 0 :(得分:19)

为了澄清Jon O的回答,关键是设置和取消设置刷新操作的操作视图。这适用于ActionBarSherlock和本机4.x操作栏。假设刷新菜单项具有ID“refresh_option”并且替换布局(具有ProgressBar)处于布局'progress_wheel'中,则以下片段将进度不确定视图放在刷新图标的顶部:

 MenuItem item = abmenu.findItem(R.id.refresh_option);
 LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View abprogress = inflater.inflate(R.layout.progress_wheel, null);
 item.setActionView(abprogress);

取消设置进度视图,刷新图标将返回到可见性:

 item.setActionView(null);

请参阅github上的a more detailed example

答案 1 :(得分:5)

很难准确说出电子邮件应用是如何做到的,但您可能希望保持简单,只需使用StateDrawable XML文件的ID调用setIcon,然后使用计时器。

答案 2 :(得分:5)

简化larham1's answer:您甚至不需要对新的操作视图进行自动操作,因为MenuItem的{​​{3}}接受了操作布局的ID,因此您只需编写:

item.setActionView(R.layout.progress_bar);

答案 3 :(得分:4)

事实证明,Google已经发布了一个将其作为其更广泛的ActionBarCompat兼容性项目的一部分的示例。 Have a look

答案 4 :(得分:3)

我正在使用原始问题中提供的代码:https://github.com/JakeWharton/ActionBarSherlock/issues/425

除了android:layout_widthandroid:layout_height(在actionbar_indeterminate_progress.xml中),我使用32dp;因为这是在ActionBarCompat中完成的方式: http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html

答案 5 :(得分:2)

您可以通过以下方式轻松完成:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_refresh: 
                item.setActionView(new ProgressBar(this));
                break;
        }
        return super.onOptionsItemSelected(item);