在ActionBar上放置一个进度条

52

我正在尝试在操作栏中放置一个不确定的ProgressBar。我使用actionView来放置progressBar,就像Google+应用程序一样。

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

问题在于进度条被视为一个项目,因此在 Nexus S 竖屏模式下,操作栏中只有另外一项内容,而在 Google+ 上我可以看到两个项目以及进度条。 如何在 Android 操作栏中放置进度条?


https://guides.codepath.com/android/Handling-ProgressBars 很好地解释了这个。 - png
3个回答

166

注意:以下功能已在支持库中被弃用。

您需要调用

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)

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

例如:

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

如果您正在使用支持库, 请将requestWindowFeature替换为supportRequestWindowFeature。然后调用
setProgressBarIndeterminateVisibility(true);

每当您想显示进度旋转器时,请在您的活动上执行此操作。


1
我已经尝试过了,问题是进度条显示得很大,而我想让它变小。我尝试将样式设置为<item name="abProgressBarStyle">@android:style/Widget.ProgressBar.Small</item>,但它不起作用!如果我能让它正常工作,那就是完美的解决方案。 - Matroska
2
更新了答案以反映对ActionBarActivity的支持。 - gunar
42
对于任何其他试图从一个Fragment中让它正常工作的人,请在包含Activity的OnCreate()方法中调用requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);,然后从您的Fragment中调用getActivity().setSupportProgressBarIndeterminateVisibility(true);。请注意,不要改变原始意义,只需使翻译更加通俗易懂。 - jokeefe
4
为了更正上面的评论,应将requestWindowFeature(Window...)更改为supportRequestWindowFeature(Window...)以使其正常工作。好吧,至少对我来说,这个技巧解决了问题。 - Phantômaxx
1
requestWindowFeature 应该在 super.onCreate(savedInstanceState); 之前调用。 - Jorge Arimany
显示剩余10条评论

0

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

如Jokeefe建议的,在我的“MainActivity extends 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();

不确定这是否回答了原帖的问题,但这是根据上面的帖子对我有效的方法。希望能帮到你。


如果您不写这个:menu.clear(); actionBarActivity = (ActionBarActivity)getActivity(); actionBarActivity.supportInvalidateOptionsMenu();那会怎么样呢? - Karioki
抱歉回复晚了。如果没有最后三行,进度条不会更新到我需要改变的内容,并且为空白。 - HostMyBus

-1

我找到了一种最简单的方法来准确展示进度。我在这里找到了它。只需使用一个类,就可以将进度条放置在任何你想要的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接