Пересмотрите старые проекты для Android 4.0. Часть вторая

в 13:53, , рубрики: ActionBar, android, Разработка под android, метки: ,

Совсем недавно я публиковал топик, в котором рассказывалось о коде, который работал в Android 2.3, но перестал работать в Android 4.0. Несколько человек написали лично на почту, поблагодарили за информацию и просили продолжить подобные публикации. На этот раз поговорим об ActionBar. У одного пользователя возникла проблема с кодом, который работал на Android 3.0, но опять перестал работать на Android 4.0.

Небольшое отступление — Злые вы, уйду я от вас

Лет 15 назад, когда я начал самостоятельно изучать программирование и одновременно подключился к интернету, то заметил удивительную вещь. Когда я, еще новичок, задавал вопрос на русскоязычном форуме, то в ответ получал тишину, либо советы учить матчасть и не путаться под ногами. Когда же задавал подобный вопрос на буржуйских форумах да еще на плохом английском (в школе изучал немецкий), то получал развернутые ответы. С тех пор практически ничего не изменилось. Я давно уже забил на наши форумы и предпочитаю общаться только «там». Наверняка, многие замечали, как разительно отличаются комментарии в блогах. У них: nice tutorial, thanks for post, excelent article. У нас: зачем очередной велосипед, у вас горизонт завален, цвета вырвиглаз, виндекапец и т.д.
Лично знаю нескольких из «бывших», которые вели блоги на двух языках — английском и русском, а потом оставляли только английскую часть. Понятно почему?
Аналогично было с моим предыдущим постом. Вот типичные высказывания: расстрелять, суровые челябинские программисты и т.д. Как-то так совпало, что на зарубежных ресурсах несколько раз попадались подобные вопросы, но никто не предлагал расстрелять за неправильный код, а просто объясняли, почему так делать нельзя. Один из примеров — http://stackoverflow.com/questions/9442527/networkonmainthreadexception-when-reading-from-web. А вообще только на этом ресурсе по запросу NetworkOnMainThreadException было выдано 90 результатов. И никто не ругается. Как говорится, почувствуйте разницу. Менталитет что-ли у нас такой.

Новая проблема — не работает значок в ActionBar

С этой проблемой поделился один из зарегистрированных пользователей моего сайта. Суть была в следующем — Значок приложения может работать как элемент навигации и играть роль кнопки Домой, как в частности логотип Хабра на сайте. Это очень удобно в некоторых случаях, когда приложение состоит из нескольких экранов и можно «тыкать» в системный значок приложения для быстрого возврата. Пример описан в документации и прекрасно работал на планшете под управлением Android 3.0, а под Android 4.0 вдруг перестал работать.
В принципе ответ в интернете нашелся быстро, более того, даже в документации можно найти решение. Но, видимо человек просто устал или глаз замылился, но сам обратившийся не нашел его. А ларчик открывался просто. Чтобы значок приложения работал как элемент навигации, надо явно прописать метод setHomeButtonEnabled()

	    protected void onCreate(Bundle savedInstanceState) 
	    {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.two);
	        ActionBar bar = getActionBar();
	        bar.setHomeButtonEnabled(true);
	    }

Оказалось, что в Android 3.0 значок был включен как кнопка навигации по умолчанию, а в Android 4.0 нет.
Кстати, обнаружил интересный момент, связанный с этой кнопкой. Система позволяет добавить дополнительную стрелочку слева от значка приложения при помощи метода bar.setDisplayHomeAsUpEnabled(true);

Пересмотрите старые проекты для Android 4.0. Часть вторая

Так вот, если вызвать этот метод, то предыдущий метод setHomeButtonEnabled() вызывать не обязательно, все и так работает.
Удачного вам программирования!

Автор: tehnolog

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js