在 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 上。
【讨论】:
这个我试过了,问题是进度条显得很大,我想把它变小。我尝试将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 上放一个进度条的主要内容,如果未能解决你的问题,请参考以下文章