【发布时间】:2016-03-04 06:52:38
【问题描述】:
我正在创建一个 ProgressBar 以放置在 LinearLayout 的垂直中心(其他布局将不起作用;我需要使用 LinearLayout)。这是一些代码:
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 也不起作用。父 ScrollView 是问题所在。
-
提示:如果你告诉人们不要对这个问题投反对票,他们中的很多人都会这样做。 “请不要投反对票”暗示这个问题可能需要投反对票。无论哪种方式,这只是不属于问题的噪音。我已在此处对其进行了编辑,并以其他方式提高了您问题的清晰度。请不要将其重新添加。对于人们如何决定投票,您无能为力。如果问题有用且清晰,您通常会得到更多的赞成票而不是反对票,这最终会弥补它。也不鼓励在 cmets 中抱怨它。
-
我从不在我的问题中添加这样的请求。这个问题很特别。我阅读了 20 多个类似的问题。我不希望人们认为它是其中之一。很少有人只是复制代码,还有一些人投反对票 - 防止未来的读者认真对待它。我没有抱怨——我只是害怕我的问题得不到解决,因为人们甚至没有阅读我的问题。
-
如果您要说“这不是重复的”,那么请说出 which 问题它不是重复的以及 为什么。来自stackoverflow.com/help/how-to-ask "包含没有帮助的相关问题的链接可以帮助其他人了解您的问题与其他问题有何不同。
-
这个问题是being discussed on meta。
标签: android android-layout scrollview layout-gravity android-gravity