在 ActionBar 上放一个进度条

Posted

技术标签:

【中文标题】在 ActionBar 上放一个进度条【英文标题】:Put a progressBar on ActionBar 【发布时间】:2012-02-27 18:34:38 【问题描述】:

我正在尝试在 actionBar 上放置一个不确定的 ProgressBar。例如,我使用 actionView 来放置进度条,例如 Google+ 应用程序。

<item
    android:id="@+id/menu_progress"
    android:actionLayout="@layout/action_progress"
    android:menuCategory="container"
    android:showAsAction="always">
</item>

问题在于进度条被视为一个项目,因此在 Nexus S 纵向模式下,我在操作栏上只有一个其他项目,而在 Google+ 上,我可以看到两个项目加上进度条。 如何使用 android actionbar 放置进度条?

【问题讨论】:

guides.codepath.com/android/Handling-ProgressBars 很好地解释了这一点 【参考方案1】:

注意:The functionality below is now deprecated in the Support Library.

你需要打电话

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)

在您的onCreate() 在设置活动的布局之前

例如

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    ... // set layout etc

如果您使用的是 support library,请将 requestWindowFeature 替换为 supportRequestWindowFeature

然后调用

setProgressBarIndeterminateVisibility(true);

只要您想显示进度微调器,就在您的 Activity 上。

【讨论】:

这个我试过了,问题是进度条显得很大,我想把它变小。我尝试将 @android:style/Widget.ProgressBar.Small 作为样式,但它不起作用!如果我让它工作,这将是完美的解决方案 更新了答案以反映 ActionBarActivity 支持。 对于其他任何试图通过 Fragment 使其工作的人,请从包含 Activity 的 OnCreate() 调用 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);,然后从您的 Fragment 调用 getActivity().setSupportProgressBarIndeterminateVisibility(true); 要更正上述评论,requestWindowFeature(Window... 应更改为 supportRequestWindowFeature(Window... 以使其正常工作。好吧,这个技巧至少为我解决了这个问题。 requestWindowFeature 应该在 super.onCreate(savedInstanceState); 之前调用【参考方案2】:

我的情况需要使用 Android 支持库版本 4 从 Fragment 更新进度条。

按照 Jokeefe 的建议,在我的“MainActivity 扩展 ActionBarActivity”中:

supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

之前

setContentView(R.layout.activity_main);

在我的片段长期运行的任务中:

onPreExecute

actionBarActivity.setSupportProgressBarIndeterminateVisibility(true);

onPostExecute

actionBarActivity.setSupportProgressBarIndeterminateVisibility(false);
menu.clear();
actionBarActivity = (ActionBarActivity)getActivity();
actionBarActivity.supportInvalidateOptionsMenu();

不确定这是否回答了 OP,但根据上面的帖子,这对我有用。希望这会有所帮助。

【讨论】:

如果你不写这个怎么办:menu.clear(); actionBarActivity = (ActionBarActivity)getActivity(); actionBarActivity.supportInvalidateOptionsMenu(); 抱歉延迟回复。如果没有最后三行,该栏不会更新为我需要更改的内容并且是空的。【参考方案3】:

我找到了一个最简单的方法,可以准确地显示您需要的进度。 I found it here .只需使用一个类,然后将进度条放在您想要的任何位置。

【讨论】:

以上是关于在 ActionBar 上放一个进度条的主要内容,如果未能解决你的问题,请参考以下文章

Action Bar

ActionBar样式解析

ActionBar样式解析

带有滑动抽屉的覆盖 ActionBar

ActionBar 徽标居中,Action 项目位于两侧

1.2.2 添加Action按钮