【问题标题】:Put a progressBar on ActionBar在 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 放置进度条?

【问题讨论】:

标签: android android-actionbar actionbarsherlock


【解决方案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 .只需使用一个类,然后将进度条放在您想要的任何位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多