问题
我有一个奇怪的问题,我无法弄清楚,需要一些其他的眼睛来看看。我已经动态创建了一个 ProgressBar 视图,它可以在各种设备和 AVD 上运行,除了我的 Motorola Xoom。
截图
所有屏幕截图的上方都有设备名称,并且从通过 ADT 抓取的任何内容都减少了大约 50%,除了 Nexus 10,它是 25%,因为它的超高分辨率。为调试目的添加了 ProgressBar 的红色背景,以显示视图存在且可见。我添加了左侧和顶部填充以使其居中。
下面的屏幕截图从 Xoom 开始,它无法工作,然后是 Nexus 10 (AVD)、Nexus 7、Galaxy Nexus 和 HTC Droid Incredible,展示了它在其他任何地方都能正常工作。拍摄后,我将添加我的代码。
摩托罗拉 Xoom 不工作
进度条不工作!但请注意视图是可见的(我们看到红色背景)。
在其他设备上正常工作
在所有这些设备上都可以看到圆圈进度。
模拟三星 Nexus 10
华硕 Nexus 7
三星 Galaxy Nexus
HTC Droid 难以置信
现在代码
这将创建包含它的父视图:
RelativeLayout discoverListLayout = new RelativeLayout(mContext);
discoverListLayout.setLayoutParams(params);
discoverListLayout.addView(mDiscoverList);
mDiscoverList 是最终显示的列表视图。ProgressBar 被加载在它上面,直到列表被加载。
现在创建并设置进度条。我在GlobalLayout 上设置了填充,否则对象的宽度和高度为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)。