Программно Созданный Android ProgressBar (Круг) Невидимый На Xoom (Работает Везде!)


Проблема

У меня странная проблема, которую я не могу понять, и мне нужно посмотреть на нее другими глазами. Я динамически создал представление ProgressBar, и оно работает на различных устройствах и AVD, за исключением моего Motorola Xoom.


Скриншоты

Все скриншоты имеют название устройства над ними и были уменьшены примерно на 50% от того, что он захватил через ADT, за исключением Nexus 10, который составляет 25% из-за его супер высокого разрешения. Красный фон для ProgressBar добавляется в целях отладки, чтобы показать, что представление есть и видно. Я добавил левую и верхнюю обивку, чтобы центрировать его.

Скриншоты ниже, начиная с Xoom, где он не работает, а затем Nexus 10 (AVD), Nexus 7, Galaxy Nexus и HTC Droid Incredible демонстрируют, что он работает везде. После выстрелов я добавлю свой код.

Motorola Xoom Не Работает

индикатор прогресса не работает! Но обратите внимание, что вид виден (мы видим красный цвет фон).

Motorola Xoom

Отлично Работает На Других Устройствах

прогресс круга виден на всех этих устройствах.

Имитация Samsung Nexus 10

Имитация Samsung Nexus 10

ASUS Nexus 7

ASUS Nexus 7

Samsung Galaxy Nexus

Samsung Galaxy Nexus

HTC Droid Incredible

HTC Droid невероятный


Теперь код

При этом создается родительское представление, содержащее это:

    RelativeLayout discoverListLayout = new RelativeLayout(mContext);
    discoverListLayout.setLayoutParams(params);
    discoverListLayout.addView(mDiscoverList);

MDiscoverList-это представление списка, которое в конечном счете отображается. Панель прогресса загружается поверх нее до тех пор, пока не будет загружен список.

Теперь создайте и настройте индикатор выполнения. Я настраиваю заполнение 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 (и не добавляю ширину padding), он также работает везде, но тогда на Xoom он показывает, но искажается, когда он растягивается на ширину (только xoom).

1 5

1 ответ:

Я честно не знаю, как и почему это может иметь значение.

Но попробуйте использовать RelativeLayout.CENTER_IN_PARENT, чтобы переместить панель прогресса в центр экрана, а не вручную устанавливать верхний и левый отступы в половину размера экрана.

Так что вместо:

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 является тем, который вы импортируете, так как ваш родитель является В данном случае-релятивистский подход.

Я действительно не могу сказать вам, что заставляет прокладку быть глючной на Xoom, но это альтернативный способ, которым вы можете получить ProgressBar в центр, который, кажется, не зависит от того, какая ошибка вызывает проблему на xoom.