用一个不确定的ProgressBarreplace一个ActionBar菜单项图标

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

有什么build议?

  • 带有actionLayout的Android操作栏菜单项无法正常工作
  • ActionBarCompat - 应用程序图标操作(点击)不适用于4.0设备
  • 在ActionBar / ActionBarSherlock中以编程方式显示下拉菜单
  • 两个动作栏(底部和上部)在同一时间?
  • 如何在材质devise中创build后退button
  • 在ActionBar中使用ProgressDialog(Android)
  • 三星Galaxy S4未alignment操作栏图标
  • FragmentPagerAdapter麻烦和困境:构造函数未定义
  • 很难准确地知道电子邮件应用程序是如何实现的,但是您可能希望保持简单,只需使用StateDrawable XML文件的id调用setIcon ,然后使用Timer更改状态即可。

    为了澄清Jon O的回答,关键是在刷新操作中设置和取消操作视图。 这可以在ActionBarSherlock和本机4.x操作栏中使用。 假设刷新菜单项具有ID“refresh_option”并且replace布局(具有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上查看更详细的示例 。

    事实certificate,Google已经发布了一个完整的例子,作为其更广泛的ActionBarCompat兼容性项目的一部分。 看一下

    为了简化larham1的答案 :你甚至不需要膨胀新的动作视图本身,因为MenuItem有接受动作布局的id 的方法 ,所以你可以简单地写:

     item.setActionView(R.layout.progress_bar); 

    我在这里使用原始问题提供的代码: 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

    你可以轻松地做到这一点:

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