是否有通用方法在Android中的视图上显示进度条?

时间:2013-11-27 19:16:46

标签: java android user-interface progress-bar

我看过很多关于如何在后台加载数据时显示进度条的帖子。所有建议都要求我们在布局xml中手动放置ProgressBar,然后使用AsyncTask显示和隐藏ProgressBar和相关视图。

但是,我想创建一个泛型类,它在运行时以编程方式创建ProgressBar并将其精确地放在有问题的视图上,并且在显示ProgressBar时可能还会略微遮挡或模糊视图。如果这是一个Swing应用程序,我会在用灰色略微着色后在视图的"glass pane"上绘制我的进度条。在这种情况下,由于进度条是同一个伪父级的子级,因此我可以轻松地将其定位为居中。

在Android UI工具包中,我不知道任何这样的“玻璃窗格”。我如何实现这种效果?

3 个答案:

答案 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);

父母引用您要将其附加到的父级。