问题
我遇到了一个奇怪的问题,无法解决,需要其他人帮忙看一下。我已经动态创建了一个ProgressBar视图,在各种设备和AVD上都可以工作,除了我的Motorola Xoom。
屏幕截图
所有的屏幕截图上方都有设备名称,并且与ADT抓取的内容相比缩小了约50%,除了Nexus 10,因为它具有超高分辨率,所以只缩小了25%。ProgressBar的红色背景是为了调试目的而添加的,以显示视图是否可见。我添加了左侧和顶部填充以使其居中。
以下是从不起作用的Xoom开始,然后是演示在其他所有设备上都正常工作的Nexus 10(AVD),Nexus 7,Galaxy Nexus和HTC Droid Incredible的屏幕截图。在截图之后,我会添加我的代码。
Motorola Xoom不能工作
进度条不起作用!但请注意视图可见(我们看到了红色背景)。
其他设备上正常工作
所有这些设备上都可以看到圆形进度。
模拟的三星Nexus 10
ASUS Nexus 7
Samsung Galaxy Nexus
HTC Droid Incredible
现在是代码
这将创建包含它的父视图:
RelativeLayout discoverListLayout = new RelativeLayout(mContext);
discoverListLayout.setLayoutParams(params);
discoverListLayout.addView(mDiscoverList);
mDiscoverList是最终显示的列表视图。在列表加载完之前,ProgressBar会显示在其上方。
现在创建并设置进度条。我在onGlobalLayout中设置了padding,因为否则对象的宽度和高度都为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)。