18

我想给 Honeycomb ActionBar 添加一个不确定的进度条,这样每当用户按下“刷新”时,刷新图标就会暂时变成一个不确定的进度条,直到任务完成。电子邮件应用程序已经这样做了,但我不知道怎么做。

有什么建议吗?

4

6 回答 6

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 上查看更详细的示例。

于 2012-11-11T08:07:44.297 回答
5

很难准确说出电子邮件应用程序是如何做到的,但您可能希望保持简单,只需使用 XML 文件的 id调用setIconStateDrawable,然后使用 Timer 更改状态。

于 2011-08-22T03:45:18.970 回答
5

为了简化larham1 的回答:您甚至不需要扩充新的操作视图本身,因为MenuItem它具有接受操作布局 id的方法,因此您可以简单地编写:

item.setActionView(R.layout.progress_bar);
于 2014-07-31T11:16:45.337 回答
4

事实证明,谷歌已经发布了一个这样做的例子,作为他们更广泛的 ActionBarCompat 兼容性项目的一部分。 看看

于 2012-01-01T00:19:34.027 回答
3

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

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

于 2012-06-07T23:13:48.730 回答
3

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

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_refresh: 
                item.setActionView(new ProgressBar(this));
                break;
        }
        return super.onOptionsItemSelected(item);
于 2014-07-18T11:28:03.210 回答