- PVSM.RU - https://www.pvsm.ru -
Совсем недавно я публиковал топик [1], в котором рассказывалось о коде, который работал в 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 [2]. А вообще только на этом ресурсе по запросу NetworkOnMainThreadException было выдано 90 результатов. И никто не ругается. Как говорится, почувствуйте разницу. Менталитет что-ли у нас такой.
С этой проблемой поделился один из зарегистрированных пользователей моего сайта [3]. Суть была в следующем — Значок приложения может работать как элемент навигации и играть роль кнопки Домой, как в частности логотип Хабра на сайте. Это очень удобно в некоторых случаях, когда приложение состоит из нескольких экранов и можно «тыкать» в системный значок приложения для быстрого возврата. Пример описан в документации и прекрасно работал на планшете под управлением 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);

Так вот, если вызвать этот метод, то предыдущий метод setHomeButtonEnabled() вызывать не обязательно, все и так работает.
Удачного вам программирования!
Автор: tehnolog
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/9358
Ссылки в тексте:
[1] топик: http://habrahabr.ru/post/145092/
[2] http://stackoverflow.com/questions/9442527/networkonmainthreadexception-when-reading-from-web: http://stackoverflow.com/questions/9442527/networkonmainthreadexception-when-reading-from-web
[3] моего сайта: http://developer.alexanderklimov.ru/android/index.php
Нажмите здесь для печати.