如果容器布局在滚动视图中,Android重心不起作用

如果容器布局在滚动视图中,Android重心不起作用,android,android-layout,scrollview,layout-gravity,android-gravity,Android,Android Layout,Scrollview,Layout Gravity,Android Gravity,我正在创建一个进度条,放置在线性布局的垂直中心,其他布局将不起作用;我需要使用线性布局。下面是一些代码: LinearLayout linearLayout = new LinearLayout(context); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.L

我正在创建一个进度条,放置在线性布局的垂直中心,其他布局将不起作用;我需要使用线性布局。下面是一些代码:

LinearLayout linearLayout = new LinearLayout(context);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT);
linearLayout.setLayoutParams(layoutParams);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setGravity(Gravity.CENTER);

//add progressbar
ProgressBar progressBar = new ProgressBar(context);
progressBar.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT));
linearLayout.addView(progressBar);
我有一个ContainerView,它将保存上面创建的LinearLayout。大概是这样的:

public class ContainerView extends ScrollView {
    public ContainerView(Context context) {
        super(context);
        initView(context);
    }

    private void initView(Context context){
        addView(linearLayout);     //which is created in the snippet above
    }
} 
如果我用LinearLayout扩展ContainerView,一切正常

如果使用ScrollView扩展ContainerView,ProgressBar将水平居中,但不会垂直居中

这种双重行为背后的原因是什么?我的目标是在下载一些数据时显示ProgressBar;下载数据后,我需要在LinearLayout中显示它


注意:使用ScrollView的原因是下载的数据可能太大,无法容纳小屏幕。这似乎是ListView的一个用例,但还有一些其他原因阻止我使用ListView。

您可以使用这种结构

<RelativeLayout>
 <ProgressBar/>      
  <ScrollView>
   <LinearLayout>
    ..
   </LinearLayout>
  </ScrollView>
</RelativeLayout>
最初,ProgressBar是不可见的,但一旦开始下载,就可以将其设置为可见状态。我们可以将centerInParent用于ProgressBar,因为我们有RelativeLayout。

您只需替换

linearLayout.setGravity(Gravity.CENTER);


在将以下属性设置为我的父ScrollView后,我使其正常工作:

android:fillViewport="true"

即使与RelativeLayout也不起作用。提示:如果你告诉人们不要对这个问题投反对票,很多人都会这样做。请不要投反对票暗示这个问题可能需要投反对票。不管怎样,这只是一个问题中不存在的噪音。我已经在这里编辑了它,并以其他方式提高了你问题的清晰度。请不要将其重新添加到中。对于人们如何决定投票,你无能为力。如果问题有用且清楚,你通常会得到更多的赞成票而不是反对票,这最终会弥补问题。在评论中抱怨也是不被鼓励的。我从不在我的问题中添加这样的要求。这个问题很特别。我读了20多个类似的问题。我不想让人们认为这是其中之一。很少有人只是复制代码,还有一些人投了反对票,这使未来的读者无法认真对待它。我不是在抱怨——我只是担心我的问题得不到解决,因为人们甚至没有读过我的问题。如果你要说这不是重复的问题,那么就说哪些问题不是重复的,为什么。从包含相关问题的链接到没有帮助的问题,可以帮助其他人理解您的问题与其他问题的不同之处。这个问题是。所以,我们不能在ScrollView中使用ProgressBar?我知道这会有用的,但这毫无理由地加深了我的层次结构。@slowandstaid我不是安卓专家:但我相信这就是scollview应该做的:Scrollview只是一个窗口,在scroll上显示其高内容视图的不同部分:Contentview的高度由您提供给它的内容决定:在这种情况下,您只提供了一个以高度和宽度作为包裹内容的进度条,因此内容视图的高度=进度条高度:因此,尽管您的重心对中心有效,因为内容视图的高度=进度条高度,但它不会有任何区别:我希望我在iOS scrollView中根据我的经验放置视图是有意义的:
android:fillViewport="true"