У меня странная проблема. Я делаю приложение с targetdk 13.
В методе onCreate моей основной деятельности я вызываю getActionBar()
настройку панели действий. Это прекрасно работает при работе на эмуляторе Android 3.2, но при использовании Android 3.0 и 3.1 getActionBar()
метод возвращает ноль.
Я нахожу это чрезвычайно странным, и я не вижу никакой причины, по которой это будет так. Это ошибка с эмуляторами или мне нужно что-то сделать, чтобы в моем приложении была панель действий?
РЕШЕНИЕ:
Я думаю, что нашел решение этой проблемы. Я не использовал setContentView, чтобы установить макет для деятельности. Вместо этого я использовал, fragmentTransaction.add(android.R.id.content, mFragment, mTag)
чтобы добавить фрагмент к деятельности. Это работало нормально в 3.2, но в более ранних версиях сота панель действий, очевидно, не установлена, если вы не используете setContentView в onCreate()
методе. Поэтому я исправил это, используя setContentView()
метод в своем onCreate()
методе, и просто снабдил его макетом, который содержал пустой FrameLayout. Я все еще могу использовать fragmentTransaction.add(android.R.id.content, mFragment, mTag)
метод так же, как и раньше.
Это не самое красивое решение, но оно работает.
источник
Ответы:
Можно использовать
getSupportActionBar()
вместоgetActionBar()
метода.источник
Если вы используете библиотеку поддержки
использовать
getSupportActionBar()
вместоgetActionBar()
* Обновить:
Класс ActionBarActivity теперь устарел:
Я рекомендую использовать:
источник
android.support.v7.app
:ActionBarActivity
устарел Использованиеandroid.support.v7.app.AppCompatActivity
вместо.Вы должны определить тип окна как панель действий перед тем, как активность отобразит его вид.
использование
перед вызовом метода setContentView ().
источник
если вы используете android.support.v7.app.AppCompatActivity
открытый класс HomeActivity расширяет AppCompatActivity {
Тогда вы должны использовать android.support.v7.app.ActionBar
Если вы используете android.support.v4.app.FragmentActivity
открытый класс HomeActivity расширяет FragmentActivity {
тогда вы должны использовать android.app.ActionBar
Если вы используете android.support.v7.app.ActionBarActivity
открытый класс HomeActivity расширяет ActionBarActivity {
Вы должны использовать android.support.v7.app.ActionBar
источник
Я столкнулся с вышеупомянутой проблемой, где
getActionBar()
метод возвращает ноль. Я звонилgetActionBar()
после постановкиsetContentView()
и еще ее возвращалnull
.Я решил проблему, установив версию min-sdk в файле Android Manifest, который изначально отсутствовал.
<uses-sdk android:minSdkVersion="11" />
источник
ActionBar нужна тема приложения или действия, чтобы иметь название приложения. Убедитесь, что вы не назвали свое приложение или действие темой. ПРИМЕЧАНИЕ.
источник
затем
затем используйте
источник
Этот ответ запоздал, но может быть полезен всем, кто прибывает из Google: вам, возможно, придется объявить
в вашем
styles.xml
. Кажется,false
может быть по умолчанию. Вы также должны быть на API 11 или выше.Более подробную информацию можно найти в документации здесь . В частности, цитата:
источник
У меня была та же проблема, и одним из решений было использовать
setContentView()
перед звонкомgetActionBar()
.Но было еще одно, что решило проблему. Я указал тему для приложения
@android:style/Theme.Holo.Light
.Я думаю, что любая тема, которая есть
<item name="android:windowActionBar">true</item>
в ней, может быть использована.источник
Основной причиной этого является использование тем, которые не поддерживают ActionBar:
В файле манифеста добавьте следующее в целевой операции или элементе приложения (если вы хотите объединить тему по всему приложению)
Примеры тем, которые поддерживают панель действий
"Theme.AppCompat.Light"
или"Theme.Holo.Light"
...Лучше использовать все стили
styles.xml
и использовать их везде, используя"@style/themName"
предыдущийи styles.xml будет иметь следующее:
подсказки:
"@android:style/Theme.Holo.Light.DarkActionBar"
, они не поддерживаются до версии 14 SDK.Чтобы ваше приложение поддерживало минимальную конкретную версию SDK, вы можете добавить следующее в
<app>
элемент:Чтобы указать минимальную версию SDK в AndroidStudio, вы можете использовать файл Gradle приложения.
источник
Я столкнулся с этой проблемой. Я проверял номер версии и включал панель действий, только если она больше или равна Honeycomb, но она возвращала ноль. Я обнаружил, что причина и причина в том, что я отключил стиль Holo Theme в style.xml в папке values-v11.
источник
перейдите в AndroidManifest.xml и замените
Android: тема = "@ стиль / AppTheme"
Android: тема = "@ андроид: стиль / Theme.Holo.Light.DarkActionBar"
источник
Используйте getSupportActionBar () вместо getActionBar ()
источник
В моем случае это было в моем коде, который не работал:
Тогда я играл с порядком кода:
И это сработало!
Вывод: requestWindowFeature должен быть первым, что вы вызываете в методе onCreate.
источник
Я была такая же проблема. Это решено изменением темы приложения в styles.xml
Перед
После
источник
Одна вещь, которую я хотел добавить, так как я только что натолкнулся на это, если вы пытаетесь получить getActionBar () для Activity, у которой есть родитель, она вернет null. Я пытаюсь реорганизовать код, где моя активность содержится в ActivityGroup, и мне потребовалось несколько хороших минут, чтобы сказать «о, черт», после просмотра источника того, как ActionBar создается в исходном коде.
источник
Я решаю это с помощью этих изменений:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
источник
Чтобы добавить к другим ответам:
Убедитесь, что вы вызываете
setActionBar()
или используетеsetSupportActionBar()
свойonCreate()
метод перед вызовомgetActionBar()
:Определите некоторую панель инструментов в вашем activity.xml, а затем в onCreate ():
источник
Я знаю, что опоздал на вечеринку (и новичок в Android) по этому вопросу, но я нашел здесь очень полезную информацию и подумал, что должен добавить результаты моих собственных усилий, чтобы заставить ActionBar работать так, как я хотел, на случай, если придут другие, как я ищу помощь.
У меня есть виджет, который является плавающим окном без заголовка окна. Я использую тему стиля для реализации
android:windowIsFloating
,android:backgroundDimEnabled
иandroid:windowNoTitle
. Виджет работал нормально, пока я не хотел добавить кнопку, которая назвала фрагментный пейджер с несколькими страницами фрагмента списка и использовал ActionBar. Это может привести к падению активности пейджера с исключением нулевого указателя. Я сузил это до ActionBar, являющегося нулевым. Следуя выводам предыдущих людей, которые внесли свой вклад в эту тему, я удалил свою тему из файла манифеста, и панель действий работала нормально, но теперь мое окно теперь больше не перемещалось (оно было полноэкранным), и у него было название страницы, которое я не хотел.Дальнейшие исследования привели меня к Руководству по API стилей и тем, которое привело меня к решению. Я обнаружил, что могу добавить свою пользовательскую тему к отдельным действиям в файле манифеста, тогда как раньше я применял ее к приложению. Все мои окна теперь имеют желаемый вид.
источник
Попробуйте расширить класс Activity из ActionBarActivity. Это решило это для меня. Сделайте что-то вроде следующего:
В моем случае класс расширялся только от Activity.
источник
Это также может помочь некоторым людям.
В моем случае это было потому, что я не определил контекст в menu.xml
Попробуй это:
Вместо этого:
источник
Просто проверьте реализацию исходного кода командой click:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Исправлена моя проблема, так как я видел, что requestWindowFeature (Window.FEATURE_ACTION_BAR) не работает; код с открытым исходным кодом, используйте его!
источник
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
работает довольно быстро
источник
В моем случае мне просто пришлось расширить
AppCompatActivity
вместоActivity
Полный пример занятий:
импорт android.os. импорт импорта androidx.appcompat.app.AppCompatActivity
На версиях
источник