我看过很多关于如何在后台加载数据时显示进度条的帖子。所有建议都要求我们在布局xml中手动放置ProgressBar,然后使用AsyncTask
显示和隐藏ProgressBar和相关视图。
但是,我想创建一个泛型类,它在运行时以编程方式创建ProgressBar并将其精确地放在有问题的视图上,并且在显示ProgressBar时可能还会略微遮挡或模糊视图。如果这是一个Swing应用程序,我会在用灰色略微着色后在视图的"glass pane"上绘制我的进度条。在这种情况下,由于进度条是同一个伪父级的子级,因此我可以轻松地将其定位为居中。
在Android UI工具包中,我不知道任何这样的“玻璃窗格”。我如何实现这种效果?
答案 0 :(得分:0)
创建一个BaseActivity,您可以从中派生所有活动(对于Fragments也是如此)。
给它类似
protected void showLoading(){
ViewGroup content = findViewById(...);
content.setVisibility(Visibility.GONE);
ViewGroup root = findViewById(...);
root.addView(new ProgressBar());
}
要确保所有布局都有一个用于root的ViewGroup和一个用于内容的ViewGroup,否则可能没有必要和膨胀布局,但这就是我如何做,它工作正常。 以上是伪代码当然,但你明白了。
还有这个图书馆:http://www.androidviews.net/2013/04/progressfragment/,但我认为没有必要为该任务导入图书馆。
答案 1 :(得分:0)
不幸的是,您必须创建此功能。我总是这样做是通过从framelayout创建一个类,然后将我的imageview放在我的进度条上。然后我创建一个用作回调的接口,这样当所述进程完成并且数据处理完毕后,我得到回调并隐藏进度条。我使用了framelayout,因为它是最简单的视图,用于通过简单地将它们放在FrameLayout中来“堆叠”视图。您可能还需要将视图放置在relativelayout内部的框架内,其宽度和高度设置为匹配父级,因此您可以在进度条上将layout_centerInParent设置为true,以便它可以很好地位于复合视图中。
答案 2 :(得分:0)
好吧,我不确定我的问题是否正确,因为它对我来说似乎比它更容易。但无论如何:
要以编程方式实例化进度条,您需要在活动中执行以下操作:
ProgressBar pb = new ProgressBar(this);
((ViewGroup) this.findViewById(R.id.view_that_will_contain_progressbar)).addView(pb);
这会将视图添加到ViewGroup view_that_will_contain_progressbar
。如果您想覆盖其他信息,则此ViewGroup应为FrameLayout
。
提示:如果要自定义ProgressBar,可以在布局文件中声明它,并执行以下操作以实例化并附加PB(仍在您的activity / fragment中):
this.getLayoutInflater().inflate(R.layout.progressbar,parent);
父母引用您要将其附加到的父级。