Android Studio 0.4.5
Dokumentasi Android untuk membuat kotak dialog khusus: http://developer.android.com/guide/topics/ui/dialogs.html
Jika Anda menginginkan dialog khusus, Anda dapat menampilkan Aktivitas sebagai dialog alih-alih menggunakan Dialog APIs. Cukup buat aktivitas dan setel temanya ke Theme.Holo.Dialog di <activity>
elemen manifes:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Namun, ketika saya mencoba ini saya mendapatkan pengecualian berikut:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Saya mendukung yang berikut ini, dan saya tidak bisa menggunakan sesuatu yang lebih besar dari 10 untuk min:
minSdkVersion 10
targetSdkVersion 19
Dalam gaya saya, saya memiliki yang berikut:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Dan dalam manifes saya, saya memiliki ini untuk kegiatan:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:theme="@android:style/Theme.Holo.Light.Dialog"
android:name="com.ssd.register.Dialog_update"
android:label="@string/title_activity_dialog_update" >
</activity>
Membuat kotak dialog seperti ini adalah sesuatu yang ingin saya lakukan, karena saya sudah menyelesaikan tata letak.
Adakah yang bisa memberitahu saya bagaimana saya bisa mengatasi masalah ini?
sumber
AppCompat
yang membentuk pustaka pendukung untuk mendukung bilah tindakan di bawah api level 11. Cukup gunakanandroid:theme="@style/AppTheme" >
untuk aktivitas dalam manifesAndroidManifest.xml
, tema yang Anda tentukan untuk aktivitas Anda mengesampingkan tema yang Anda tentukan untuk aplikasi Anda. Hapusandroid:theme
garis dari<activity>
tag.Jawaban:
Alasan Anda mengalami masalah ini adalah karena aktivitas yang Anda coba terapkan pada tema dialog diperluas
ActionBarActivity
yang memerlukanAppCompat
tema untuk diterapkan.Pembaruan : Memperluas
AppCompatActivity
juga akan memiliki masalah iniDalam hal ini, ubah warisan Java dari
ActionBarActivity
menjadiActivity
dan biarkan tema dialog dalam manifes karena itu, bukanTheme.AppCompat
nilaiAturan umum adalah bahwa jika Anda ingin kode Anda mendukung versi Android yang lebih lama, itu harus memiliki
AppCompat
tema dan kode java harus diperluasAppCompatActivity
. Jika Anda memiliki * aktivitas yang tidak memerlukan dukungan ini, seperti Anda hanya peduli dengan versi dan fitur Android terbaru, Anda dapat menerapkan tema apa pun untuknya, tetapi kode java harus lebih lama dari yang biasaActivity
.CATATAN: Ketika mengubah dari
AppCompatActivity
(atau subkelas,ActionBarActivity
), menjadiActivity
, juga harus mengubah berbagai panggilan dengan "dukungan" ke panggilan yang sesuai tanpa "dukungan". Jadi, alih-alihgetSupportFragmentManager
, hubungigetFragmentManager
.sumber
ActionBarActivity
apa yang ditunjukkan dari pernyataan impornya dari komentar di bawah pertanyaan.Yang perlu Anda lakukan adalah menambahkan
android:theme="@style/Theme.AppCompat.Light"
tag aplikasi Anda dalamAndroidManifest.xml
file.sumber
Menyalin jawaban dari @ MarkKeen di komentar di atas karena saya memiliki masalah yang sama.
Saya memiliki kesalahan yang dinyatakan di bagian atas posting dan terjadi setelah saya menambahkan dialog peringatan. Saya memiliki semua informasi gaya yang relevan di manifes. Masalah saya disembuhkan dengan mengubah referensi konteks di pembangun lansiran - Saya mengubah:
untuk:
Dan tidak ada lagi masalah.
sumber
getActivity()
daripadathis
seperti yang disarankan di atas dan masalahnya sudah diperbaiki. Adapun alasannya, saya hanya dapat menduga kode AlertDialog.Builder (xxx) yang lebih lama baik menginginkan jenis yang berbeda diteruskan, atau hanya sedikit pilih-pilih tentang apa yang diteruskan, sedangkan Builder saat ini () benar-benar menginginkan sebuah Aktivitas. Karena Google telah memilih untuk menyembunyikan (menghapus?) Dokumentasi untuk kode lama, mungkin dalam upaya untuk mendorong penggunaan versi v7.app, saya tahu tidak ada cara untuk memastikannya.getContext()
alih-alihthis
jika Anda berada di dalam kelas ArrayAdapter atau serupa.min SDK adalah 10.
ActionBar
tersedia dari api level 11. Jadi untuk 10 Anda akan menggunakanAppCompat
dari perpustakaan dukungan yang Anda perlu gunakanTheme.AppCompat
atau turunan dari yang sama.Menggunakan
Atau jika Anda tidak ingin panel tindakan di bagian atas
Info lebih lanjut @
http://developer.android.com/guide/topics/ui/actionbar.html
Edit:
Saya mungkin salah membaca pos operasi.
Tampaknya op ingin Dialog dengan Tema Aktivitas. Jadi seperti yang sudah disarankan oleh Bobbake4 memperpanjang
Activity
bukannyaActionBarActivity
.Juga lihat Atribut Dialog di tautan di bawah ini
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/res/values/themes.xml/
sumber
Jika Anda menggunakan konteks aplikasi, seperti ini:
ubah ke konteks aktivitas seperti ini:
sumber
Saya mengalami masalah ini meskipun Tema saya adalah
AppCompat
Tema dan Aktivitas saya adalahAppCompatActivity
(atauActivity
, seperti yang disarankan pada jawaban orang lain). Jadi saya membersihkan, membangun kembali, dan menjalankan kembali proyek.( Bangun -> Bersihkan Proyek; Bangun -> Bangun Kembali Proyek; Jalankan -> Jalankan )
Ini mungkin terlihat bodoh, tetapi sekarang berfungsi dengan baik !
Semoga ini membantu!
sumber
Inilah yang diperbaiki untuk saya: alih-alih menentukan tema dalam manifes, saya menentukannya
onCreate
untuk setiap aktivitas yang diperluasActionBarActivity
:Ini
MyAppTheme
adalah turunan dariTheme.AppCompat
, dan didefinisikan dalam xml. Perhatikan bahwa tema harus ditetapkan sebelumsuper.onCreate
dansetContentView
.sumber
pergi ke gaya Anda dan taruh orang tua
dari pada
sumber
Dalam kasus saya, saya tidak memiliki file nilai-v21 di direktori res saya. Kemudian saya membuatnya dan menambahkan kode-kode berikut:
sumber
Ubah tema Kegiatan yang diinginkan. Ini bekerja untuk saya:
sumber
Saya mengalami crash pada perangkat Samsung meskipun aktivitasnya memang menggunakan Theme.AppCompat . Penyebab utama terkait dengan optimasi aneh di sisi Samsung:
Solusi saya baru saja dihapus
android:launchMode="singleTask"
sumber
Jika Anda perlu memperpanjang ActionBarActivity yang Anda butuhkan di style.xml Anda:
Jika Anda menetapkan sebagai tema utama aplikasi Anda sebagai android: Theme.Material.Light alih-alih AppTheme.Base maka Anda akan mendapatkan "IllegalStateException: Anda perlu menggunakan tema Theme.AppCompat (atau keturunan) dengan aktivitas ini" kesalahan.
sumber
Kerjakan saja
Dari pada
sumber
this
diharapkan.Saya memiliki masalah yang sama, tetapi diselesaikan ketika saya menempatkan ini pada manifes: android: theme = "@ style / Theme.AppCompat.
sumber
Dalam kasus saya, masalah seperti itu muncul ketika saya mencoba menampilkan Dialog. Masalahnya adalah dalam konteks, saya telah menggunakan getBaseContext () yang secara teoritis harus mengembalikan konteks Aktivitas, tetapi tampaknya tidak, atau mengembalikan konteks sebelum Tema diterapkan.
Jadi saya baru saja mengganti getBaseContexts () dengan " ini ", dan sekarang berfungsi seperti yang diharapkan.
sumber
Saya memiliki aktivitas dengan tema yang
<android:theme="@android:style/Theme.Dialog">
digunakan untuk menampilkan dialog di appWidget saya dan saya memiliki masalah yang samasaya memecahkan kesalahan ini dengan mengubah kode aktivitas seperti di bawah ini:
sumber
bagi saya solusi untuk menggunakan ContextThemeWrapper:
dari Android - Bagaimana cara membuat FAB secara terprogram?
sumber
Pastikan Anda menggunakan konteks aktivitas saat membuat Dialog Peringatan baru dan bukan konteks aplikasi atau basis.
sumber
Saya punya masalah ini juga dan apa yang saya lakukan untuk memperbaikinya, DAN masih menggunakan tema Holo adalah untuk mengambil langkah-langkah ini:
pertama saya mengganti impor ini:
dengan yang ini:
lalu ubah ekstensi saya dari:
untuk ini:
Dan juga harus mengubah impor ini:
untuk impor ini:
dan kemudian Anda dapat menggunakan tag tema Anda dalam manifes di tingkat aktivitas:
dan terakhir, (kecuali jika Anda memiliki kelas lain di proyek Anda yang harus menggunakan v7 appCompat) Anda dapat membersihkan dan membangun kembali proyek Anda atau menghapus entri ini dalam file build gradle di tingkat aplikasi:
jika Anda memiliki kelas lain di proyek Anda yang harus menggunakan v7 appCompat maka bersihkan dan bangun kembali proyek.
sumber
Anda telah melakukannya karena Anda ingin menerapkan Desain Bahan dalam gaya tema Anda di versi SDK sebelumnya ke 21.
ActionBarActivity
mengharuskanAppTheme
jadi jika Anda juga ingin mencegah kustomisasi Anda sendiri tentang AppTheme Anda, hanya Anda yang harus mengubah dalam styles.xml Anda (sebelumnya ke sdk 21) jadi dengan cara ini, dapat mewarisi tema App Compat.untuk ini:
sumber
Ubah induk gaya tema Anda menjadi
Ini bekerja untuk saya ...
sumber
Anda memiliki banyak solusi untuk kesalahan itu.
Anda harus menggunakan Activity atau FragmentActivity alih-alih ActionbarActivity atau AppCompatActivity
Jika Anda ingin menggunakan ActionbarActivity atau AppCompatActivity , Anda harus mengubah styles.xml Theme.Holo.xxxx ke Theme.AppCompat.Light (jika perlu tambahkan ke DarkActionbar )
Jika Anda tidak memerlukan atribut lanjutan tentang bilah tindakan atau AppCompat Anda tidak perlu menggunakan Actionbar atau AppCompat .
sumber
Dalam manifes Android cukup ubah tema aktivitas menjadi AppTheme sebagai ikuti cuplikan kode
sumber
Ini adalah saat Anda menginginkan AlertDialog dalam sebuah Fragmen
sumber
Dalam pengalaman saya, masalahnya adalah konteks di mana saya menunjukkan dialog saya. Di dalam tombol klik saya instantiate AlertDialog dengan cara ini:
Tetapi konteksnya tidak benar dan menyebabkan kesalahan. Saya telah mengubahnya menggunakan konteks aplikasi dengan cara ini:
Di bagian menyatakan:
dalam metode onCreate
Dan akhirnya dalam kode di mana saya membutuhkan AlertDialog:
Ini solusi untuk saya.
sumber
Yang ini bekerja untuk saya:
sumber
Aktivitas Anda memperluas ActionBarActivity yang mengharuskan penerapan AppCompat.theme . Ubah dari ActionBarActivity ke Activity atau FragmentActivity , itu akan menyelesaikan masalah.
sumber
Saya mendapatkan masalah yang sama. Karena saya sedang membuat laci navigasi khusus. Tapi saya lupa menyebutkan tema dalam manifes saya seperti ini
Segera saya menambahkan tema di atas ke manifes saya untuk menyelesaikan masalah.
sumber
Solusi cepat.
Ubah induk tema dasar Anda di styles.xml
Ganti dari
untuk
sumber
Solusi ini berhasil untuk saya.
Pustaka desain tergantung pada Dukungan v4 dan Pustaka Dukungan AppCompat, jadi jangan gunakan versi yang berbeda untuk appcompat dan pustaka desain secara bertahap.
menggunakan
dari pada
sumber