我有一个奇怪的问题,我无法弄明白,需要一些其他的眼睛来看待。我已经动态创建了一个ProgressBar视图,除了我的Motorola Xoom之外,它还适用于各种设备和AVD。
所有屏幕截图都有它们之上的设备名称,并且从它通过ADT获得的任何内容减少了大约50%,除了Nexus 10,因为它的超高分辨率是25%。添加了ProgressBar的红色背景以用于调试目的,以显示视图在那里并且可见。我添加了左边和顶部填充以使其居中。
下面的屏幕截图从Xoom开始,它不起作用,其次是Nexus 10(AVD),Nexus 7,Galaxy Nexus和HTC Droid Incredible,展示它在其他地方工作。在镜头之后,我将添加我的代码。
进度条无效!但请注意视图是可见的(我们看到红色背景)。
在所有这些设备上都可以看到圈子进度。
模拟Samsung Nexus 10
华硕Nexus 7
三星Galaxy Nexus
HTC Droid难以置信
这将创建包含它的父视图:
RelativeLayout discoverListLayout = new RelativeLayout(mContext);
discoverListLayout.setLayoutParams(params);
discoverListLayout.addView(mDiscoverList);
mDiscoverList是最终显示的列表视图。 ProgressBar加载在它之上,直到加载列表。
现在创建并设置进度条。我在onGlobalLayout上设置了填充,因为否则对象的宽度和高度为0。
mDiscoverLoading = new ProgressBar(mContext);
params.height = ViewPager.LayoutParams.WRAP_CONTENT;
params.width = ViewPager.LayoutParams.WRAP_CONTENT;
mDiscoverLoading.setLayoutParams(params);
mDiscoverLoading.setIndeterminate(true);
discoverListLayout.addView(mDiscoverLoading);
ViewTreeObserver vto = mDiscoverLoading.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
if (mDiscoverList.getCount() > 0) {
processLoadedList(true);
} else {
mDiscoverLoading.setBackgroundColor(getActivity().getResources().getColor(R.color.stitchoid_red));
mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0);
}
ViewTreeObserver obs = mDiscoverLoading.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
所以除了摩托罗拉Xoom之外,一切都像冠军一样!?我将不胜感激任何见解或建议,以帮助解决这个问题。如果我应该提供任何其他信息,请告诉我。
非常感谢!
*附录:一个奇怪的事情可能不是很相关,但以防万一:如果我将ProgressBar宽度设置为match_parent(并且不添加宽度填充)它也可以在其他地方工作但是然后在Xoom上确实显示但是因为它被拉伸到宽度(仅限xoom)而被扭曲。
答案 0 :(得分:6)
老实说,我不知道它会如何或为何有所作为。
但是尝试使用RelativeLayout.CENTER_IN_PARENT将ProgressBar放到屏幕的中心,而不是手动将顶部和左侧填充设置为屏幕大小的一半。
所以而不是:
mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0);
使用
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
mDiscoverLoading.setLayoutParams(lp);
请注意,LayoutParams对象有几个不同的“版本”,您需要确保RelativeLayout.LayoutParams
是您导入的版本,因为在这种情况下您的父级是RelativeLayout。
我无法真正告诉你是什么导致填充在Xoom上出错,但这是另一种方法,你可以将ProgressBar放到中心,这似乎不受任何导致在xoom上发布。