Java 将操作栏菜单项图标替换为不确定的进度栏

Java 将操作栏菜单项图标替换为不确定的进度栏,java,android,android-3.0-honeycomb,android-actionbar,Java,Android,Android 3.0 Honeycomb,Android Actionbar,我想在Honeycomb ActionBar中添加一个不确定的进度条,这样每当用户按下“刷新”按钮时,刷新图标就会临时变成一个不确定的进度条,直到任务完成。电子邮件应用程序已经做到了,但我不知道怎么做 有什么建议吗?很难确切地说出电子邮件应用程序是如何实现的,但您可能希望保持简单,只需使用StateDrawableXML文件的id进行调用,然后用定时器改变状态。事实证明,谷歌已经发布了一个这样做的例子,作为其更广泛的ActionBarCompat兼容性项目的一部分 我在这里使用原始版本中提供的代

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


有什么建议吗?

很难确切地说出电子邮件应用程序是如何实现的,但您可能希望保持简单,只需使用
StateDrawable
XML文件的id进行调用,然后用定时器改变状态。

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

我在这里使用原始版本中提供的代码:

除了
android:layout_width
android:layou height
(在actionbar_undeterminate_progress.xml中)之外,我使用
32dp
;因为ActionBarCompat就是这样做的:

要澄清Jon O的答案,关键是在刷新操作上设置和取消设置操作视图。这在ActionBarSherlock和native 4.x操作栏中都有效。假设刷新菜单项具有ID“refresh\u option”,并且替换布局(具有ProgressBar)位于布局“progress\u 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上的。

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

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_refresh: 
                item.setActionView(new ProgressBar(this));
                break;
        }
        return super.onOptionsItemSelected(item);
为了简化:您甚至不需要膨胀新动作视图本身,因为
MenuItem
具有接受动作布局id的功能,因此您可以简单地编写:

item.setActionView(R.layout.progress_bar);

设置图标仅适用于选项卡图标,而不适用于操作栏本身。对于ActionIcons,这是否也是偶然的,或者这个答案是错误的?该示例依赖于一个具有相邻刷新图标和不确定进度的设置布局,使用show/hide。在ActionBar中,我们既没有布局也没有访问权限。下一步尝试Femi的想法…它确实在旧设备上使用显示/隐藏,是的;但是,如果您查看ActionBarHelperHoneycomb/ActionBarHelperICS类,它们也会以适当/更新的方式为ICS和Honeycom提供帮助。它适用于所有设备(我知道;我在我自己的应用程序中使用它,用于2.1+、3.x和4.x,并且适用于所有设备,包括不确定的进度条)。不幸的是,链接现在断开了(谷歌决定删除URL?叹气)。但我认为您仍然可以从android支持库的SDK示例中获得代码。或者谷歌“actionbarcompat”并查看以某种形式包含它的众多github存储库中的一个(我不太愿意链接任何一个)。如何使用广播意图将菜单项按钮/图标替换为不确定的progressbar?我尝试过这个,但一直失败。刷新/刷新相关:问题是:新ProgressBar比常规操作项宽一点。因此,所有相邻的项目在出现时都会向两侧移动一点(当它消失时会“向后移动”)。有没有办法解决这个问题?问题是:新的ProgressBar比常规的动作项要宽一点。因此,所有相邻的项目在出现时都会向两侧移动一点(当它消失时会“向后移动”)。如何解决这个问题?我用
创建了一个布局文件。它避免了菜单项的移动。记住设置
项.setActionView(R.layout.your_布局)