Saya mengalami masalah aneh. Saya membuat aplikasi dengan targetdk 13.
Dalam metode onCreate aktivitas utama saya, saya menelepon getActionBar()
untuk menyiapkan bilah tindakan saya. Ini berfungsi dengan baik ketika berjalan pada emulator Android 3.2, tetapi ketika menggunakan Android 3.0 dan 3.1 getActionBar()
metode mengembalikan nol.
Saya menemukan ini sangat aneh, dan saya tidak dapat melihat alasan mengapa itu akan terjadi. Apakah ini bug dengan emulator atau ada sesuatu yang perlu saya lakukan, untuk memastikan bahwa aplikasi saya memiliki actionbar?
SOLUSI:
Saya pikir saya telah menemukan solusi untuk masalah ini. Saya tidak menggunakan setContentView untuk mengatur tata letak aktivitas. Sebagai gantinya saya menggunakan fragmentTransaction.add(android.R.id.content, mFragment, mTag)
untuk menambahkan sebuah fragmen ke aktivitas. Ini berfungsi dengan baik di 3.2, tetapi dalam versi honeycomb sebelumnya bilah tindakan tampaknya tidak disetel jika Anda tidak menggunakan setContentView dalam onCreate()
metode. Jadi saya memperbaikinya dengan menggunakan setContentView()
metode dalam onCreate()
metode saya dan hanya menyediakannya dengan tata letak yang berisi FrameLayout kosong. Saya masih bisa menggunakan fragmentTransaction.add(android.R.id.content, mFragment, mTag)
metode dengan cara yang sama seperti sebelumnya.
Ini bukan perbaikan tercantik, tetapi berhasil.
sumber
Jawaban:
Dapat digunakan
getSupportActionBar()
sebagai penggantigetActionBar()
metode.sumber
Jika Anda menggunakan perpustakaan dukungan
gunakan
getSupportActionBar()
sebagai gantigetActionBar()
* Perbarui:
Kelas ActionBarActivity sekarang sudah usang:
Saya merekomendasikan untuk menggunakan:
sumber
android.support.v7.app
:ActionBarActivity
Gunakan yang sudah tidak digunakan lagiandroid.support.v7.app.AppCompatActivity
.Anda harus mendefinisikan jenis jendela sebagai bilah tindakan sebelum aktivitas membuat tampilan.
menggunakan
sebelum memanggil metode setContentView ().
sumber
jika Anda menggunakan android.support.v7.app.AppCompatActivity
HomeActivity kelas publik memperluas AppCompatActivity {
Maka Anda harus menggunakan android.support.v7.app.ActionBar
Jika Anda menggunakan android.support.v4.app.FragmentActivity
HomeActivity kelas publik memperluas FragmentActivity {
maka Anda harus menggunakan android.app.ActionBar
Jika Anda menggunakan android.support.v7.app.ActionBarActivity
HomeActivity kelas publik memperluas ActionBarActivity {
Anda harus menggunakan android.support.v7.app.ActionBar
sumber
Saya menghadapi masalah di atas di mana
getActionBar()
metode mengembalikan null. Saya menelepongetActionBar()
setelah pengaturansetContentView()
dan masih mengembalikan anull
.Saya menyelesaikan masalah dengan mengatur versi min-sdk dalam file Android Manifest yang hilang pada awalnya.
<uses-sdk android:minSdkVersion="11" />
sumber
ActionBar membutuhkan Tema aplikasi atau aktivitas untuk memiliki judul aplikasi. Pastikan Anda belum menata aplikasi atau aktivitas Anda sebagai Theme.NOTITLE.
sumber
kemudian
lalu gunakan
sumber
Jawaban ini terlambat tetapi mungkin bermanfaat bagi siapa pun yang datang dari Google: Anda mungkin perlu menyatakan
di Anda
styles.xml
. Tampaknyafalse
bisa menjadi default. Anda juga harus menggunakan API 11 atau lebih tinggi.Rincian lebih lanjut dapat ditemukan di dokumentasi di sini . Secara khusus, kutipan:
sumber
Saya memiliki masalah yang sama dan salah satu solusi adalah menggunakan
setContentView()
sebelum menelepongetActionBar()
.Tetapi ada hal lain yang memperbaiki masalah tersebut. Saya menentukan tema aplikasi yang akan dibuat
@android:style/Theme.Holo.Light
.Saya pikir tema apa pun, yang ada
<item name="android:windowActionBar">true</item>
di dalamnya, dapat digunakan.sumber
Alasan utama untuk itu adalah menggunakan tema yang tidak mendukung ActionBar:
Dalam file nyata tambahkan yang berikut ini baik di aktivitas target Anda atau elemen aplikasi (jika Anda ingin menyatukan tema di seluruh aplikasi)
Contoh tema yang mendukung panel tindakan
"Theme.AppCompat.Light"
atau"Theme.Holo.Light"
...Lebih baik untuk meletakkan semua gaya
styles.xml
dan menggunakannya di mana-mana menggunakan"@style/themName"
sehingga yang sebelumnya akandan styles.xml akan memiliki yang berikut:
Petunjuk:
"@android:style/Theme.Holo.Light.DarkActionBar"
tidak didukung sebelum SDK versi 14.Untuk memungkinkan aplikasi Anda mendukung versi spesifik SDK minimum, Anda dapat menambahkan
<app>
elemen di bawah ini :Untuk menentukan versi min SDK di AndroidStudio, Anda bisa menggunakan file Gradle aplikasi.
sumber
Saya mengalami masalah ini. Saya memeriksa nomor versi dan mengaktifkan bilah tindakan hanya jika lebih besar atau sama dengan Honeycomb, tetapi mengembalikan nol. Saya menemukan alasan dan akar penyebabnya adalah saya telah menonaktifkan gaya Tema Holo di style.xml di bawah folder values-v11.
sumber
buka AndroidManifest.xml dan ganti
android: theme = "@ style / AppTheme"
android: theme = "@ android: style / Theme.Holo.Light.DarkActionBar"
sumber
Gunakan getSupportActionBar () alih-alih getActionBar ()
sumber
Dalam kasus saya, saya memiliki ini dalam kode saya yang tidak berfungsi:
Kemudian saya bermain dengan urutan kode:
Dan itu berhasil!
Kesimpulan: requestWindowFeature harus menjadi hal pertama yang Anda panggil dalam metode onCreate.
sumber
Saya memiliki masalah yang sama. Itu dipecahkan dengan menyanyikan tema aplikasi di styles.xml
Sebelum
Setelah
sumber
Satu hal yang ingin saya tambahkan karena saya baru saja menemukan ini, jika Anda mencoba untuk mendapatkanActionBar () pada Kegiatan yang memiliki orang tua, itu akan mengembalikan nol. Saya mencoba untuk memperbaiki kode tempat Kegiatan saya terkandung di dalam ActivityGroup, dan butuh beberapa menit bagi saya untuk beralih "oh duh" setelah melihat sumber bagaimana ActionBar dibuat dalam sumber.
sumber
Saya menyelesaikannya dengan perubahan ini:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
sumber
Untuk menambah jawaban lain:
Pastikan Anda menelepon
setActionBar()
atausetSupportActionBar()
menggunakanonCreate()
metode Anda sebelum memanggilgetActionBar()
:Tentukan beberapa Bilah Alat di activity.xml Anda, lalu di onCreate ():
sumber
Saya tahu saya terlambat ke pesta (dan baru di Android) tentang pertanyaan ini, tetapi saya menemukan informasi di sini sangat membantu dan berpikir saya harus menambahkan temuan dari usaha saya sendiri dengan membuat ActionBar bekerja seperti yang saya inginkan jika orang lain seperti saya datang mencari bantuan.
Saya memiliki widget yang merupakan jendela mengambang tanpa judul jendela. Saya menggunakan tema gaya untuk mengimplementasikan
android:windowIsFloating
,android:backgroundDimEnabled
danandroid:windowNoTitle
. Widget berfungsi dengan baik sampai saya ingin menambahkan tombol yang disebut pager fragmen dengan beberapa halaman daftar fragmen dan menggunakan ActionBar. Itu akan crash pada aktivitas pager dengan pengecualian pointer nol. Saya mempersempitnya ke ActionBar menjadi nol. Mengikuti temuan orang-orang sebelumnya yang berkontribusi pada utas ini, saya menghapus tema saya dari file manifes dan ActionBar bekerja dengan baik, tetapi sekarang jendela saya sekarang melayang lagi (itu fullscreen) dan memiliki judul halaman yang tidak saya inginkan.Penelitian lebih lanjut membawa saya ke Panduan Pelatihan Styles and Themes API yang membawa saya ke solusi. Saya menemukan saya dapat menambahkan tema khusus saya ke aktivitas individual di file manifes sedangkan sebelum saya menerapkannya ke aplikasi. Semua jendela saya sekarang memiliki tampilan yang diinginkan.
sumber
Coba perpanjang kelas Aktivitas Anda dari ActionBarActivity. Ini menyelesaikannya untuk saya. Lakukan sesuatu seperti berikut ini:
Dalam kasus saya, kelas hanya diperluas dari Activity.
sumber
Ini juga dapat membantu beberapa orang.
Dalam kasus saya, itu karena saya belum mendefinisikan konteks di menu.xml
Coba ini:
Alih-alih ini:
sumber
Periksa saja implementasi kode sumber dengan perintah klik:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Memperbaiki masalah saya ketika saya melihat requestWindowFeature (Window.FEATURE_ACTION_BAR) gagal; kode adalah open source, gunakan !!
sumber
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
bekerja dengan sangat cepat
sumber
Dalam kasus saya, saya hanya perlu memperpanjang
AppCompatActivity
daripadaActivity
Kelas contoh aktivitas lengkap:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity
Pada Versi
sumber