Программно Созданный 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 Не Работает
индикатор прогресса не работает! Но обратите внимание, что вид виден (мы видим красный цвет фон).
Отлично Работает На Других Устройствах
прогресс круга виден на всех этих устройствах.
Имитация Samsung Nexus 10
ASUS Nexus 7
Samsung Galaxy Nexus
HTC Droid Incredible
Теперь код
При этом создается родительское представление, содержащее это:
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 ответ:
Я честно не знаю, как и почему это может иметь значение.
Но попробуйте использовать 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.