问题
我遇到一个奇怪的问题,我无法弄清楚,需要其他眼睛才能看到。我已经动态创建了一个ProgressBar View ,除了Motorola Xoom之外,它还可以在多种设备和AVD上运行。

屏幕截图
除了Nexus 10的25%的超高分辨率外,所有屏幕截图的设备名称均在其上方,并且比通过ADT抓取的内容减少了约50%。为调试目的添加了ProgressBar的红色背景,以显示该 View 在那里并且可见。我添加了左侧和顶部填充以使其居中。
下面的屏幕快照从Xoom无法使用开始,然后是Nexus 10(AVD),Nexus 7,Galaxy Nexus和HTC Droid Incredible,表明它在其他地方都可以使用。拍摄后,我将添加我的代码。
摩托罗拉Xoom无法正常工作
进度栏不起作用!但是请注意,该 View 是可见的(我们看到红色背景)。

在其他设备上正常工作
在所有这些设备上都可以看到圈子进度。
模拟三星Nexus 10

华硕Nexus 7

三星Galaxy Nexus

HTC Droid Incredible

现在的代码
这将创建包含它的父 View :

    RelativeLayout discoverListLayout = new RelativeLayout(mContext);
    discoverListLayout.setLayoutParams(params);
    discoverListLayout.addView(mDiscoverList);
mDiscoverList是最终显示的 ListView 。 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);
        }
    });
因此,除了在Motorola Xoom上,一切都像冠军一样吗?对于能帮助解决此问题的任何见解或建议,我将不胜感激。请让我知道是否需要提供其他信息。

*附录:一个奇怪的注意事项,可能不太相关,但以防万一:如果我将ProgressBar的宽度设置为match_parent(并且不添加宽度填充),它也可以在其他任何地方使用,但是在Xoom上确实可以显示,但是在拉伸(stretch)到一定宽度时会变形(仅适用于xoom)。

最佳答案

老实说,我不知道如何或为什么会有所作为。

但是,请尝试使用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。

10-08 18:19