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

Mel*_*var 18 java android android-3.0-honeycomb android-actionbar

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

有什么建议?

lar*_*am1 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);
Run Code Online (Sandbox Code Playgroud)

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

 item.setActionView(null);
Run Code Online (Sandbox Code Playgroud)

请参阅github上的更详细示例.


Fem*_*emi 5

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

  • “设置”图标仅适用于选项卡“图标”,而不适用于“操作栏”本身。这是否也对ActionIcons起作用,还是这个答案有误? (2认同)

aga*_*aga 5

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

item.setActionView(R.layout.progress_bar);
Run Code Online (Sandbox Code Playgroud)