Представления не отображаются на Android Jelly Bean

В настоящее время я разрабатываю приложение, с помощью которого можно получить и просмотреть расписание. Для отображения расписания я использовал исходные файлы Java TimeRulerView (а также BlocksLayout и BlockView) из приложения Google IO 2011, потому что мне понравился внешний вид. Исходный код можно найти здесь: https://github.com/underhilllabs/iosched2011. (Гугл заменил там один на код IO2012).

Поскольку вчера мой Galaxy Nexus обновился до Jelly Bean (4.1.1), TimeRulerView (и/или один из других) больше не отображается.

Странно то, что они на самом деле все еще там, но их не видно. Я вижу полосу прокрутки той длины, которую обычно имеет таймер. Кроме того, когда я обычно нажимаю на блок в представлении, я получаю небольшое всплывающее окно, и это все еще происходит, когда я не вижу шкалу времени или блок.

Я протестировал исходное приложение IO2011 на своем JB GN, но там тоже ничего не видно, поэтому проблема заключается в (одном) представлении (видах) или в том, как JellyBean визуализирует представление (виды) (может быть, масло проекта?).

См. здесь ( https://dl.dropbox.com/u/7102660/TimeRulerView_JellyBean_problem.zip ) для скриншоты ICS (приложение работает), JB (приложение не работает) и приложение GoogleIO2011.


person PieterAelse    schedule 18.07.2012    source источник
comment
У меня такая же проблема с ImageViews. После обновления до Jelly Bean изображения больше не отображаются. Хотя пространство макета рассчитано правильно.. (я манипулирую ими в getView пользовательского адаптера массива)   -  person fklappan    schedule 18.07.2012
comment
Используйте инструмент для просмотра иерархии, чтобы увидеть границы вашего представления. Вы узнаете, имеет ли он нулевую ширину/высоту, или есть ли проблема с его дочерними представлениями, или если он правильно вычислил размер, а содержимое просто не отрисовывается. С этой информацией вы можете двигаться дальше.   -  person Pointer Null    schedule 01.08.2012


Ответы (2)


Благодаря ответу Криса я поиграл с настройками аппаратного ускорения. Я также использую код iosched2011, и мне нужно было всего лишь удалить строку android:layerType="software" из представления BlocksLayout внутри файла block_content.xml.

person Stefan Arn    schedule 27.08.2012
comment
Именно это решение, наконец, привело к появлению моих пользовательских представлений, но некоторые из них были глючными или отображались неправильно. Мне пришлось добавить android:hardwareAccelerated=false в активность в манифесте, чтобы все снова заработало как обычно. - person SilithCrowe; 11.09.2012

Может ли это быть как-то связано с аппаратным ускорением? ? Совсем недавно я столкнулся с проблемой на нескольких телефонах с ICS, но это коснулось не всех телефонов/устройств. Добавление тега hardwareAccelerated в мой манифест также не решило проблему, и мне пришлось определить его для конкретных представлений, которые я не хотел использовать для аппаратного ускорения. В моем решении использовалось android:layerType="software" в мои XML-макеты и setLayerType(LAYER_TYPE_SOFTWARE, null) в коде Java.

РЕДАКТИРОВАТЬ: тестируя это больше, это не решило мою проблему с помощью setLayerType на Jelly Bean. Установка типа слоя на программное обеспечение в ICS решила мою проблему. Единственный способ, которым я мог отображать представления, - это установить для всего приложения или конкретной активности значение android:hardwareAccelerated="false".

person Chris Feist    schedule 01.08.2012
comment
android:hardwareAccelerated=false было тем, что в конечном итоге решило это для меня, плюс решение Стефана Арна. - person SilithCrowe; 11.09.2012