Pertanyaan Anda perlu menggunakan tema Theme.AppCompat (atau turunan) dengan aktivitas ini


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 Activity sebagai dialog alih-alih menggunakan API Dialog. Cukup buat aktivitas dan atur temanya ke Theme.Holo.Dialog in itu <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, 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 harus saya lakukan, karena saya telah menyelesaikan tata letaknya.

Adakah yang bisa memberitahu saya bagaimana saya bisa mengatasi masalah ini?


770
2018-02-16 17:34


asal


Jawaban:


Alasan Anda mengalami masalah ini adalah karena aktivitas yang Anda coba terapkan untuk memperluas tema dialog ActionBarActivity yang membutuhkan AppCompat tema yang akan diterapkan.

Memperbarui: Memperluas AppCompatActivity juga akan memiliki masalah ini

Dalam hal ini, ubah warisan Java dari ActionBarActivity untuk Activity dan biarkan tema dialog dalam manifes sebagaimana adanya, bukan Theme.AppCompat nilai


Aturan umumnya adalah jika Anda ingin kode Anda mendukung versi Android yang lebih lama, ia harus memiliki AppCompat tema dan kode java harus diperluas AppCompatActivity. Jika Anda memiliki * aktivitas yang tidak memerlukan dukungan ini, seperti Anda hanya peduli tentang versi dan fitur terbaru Android, Anda dapat menerapkan tema apa pun untuk itu tetapi kode java harus memperpanjang lama Activity.


CATATAN: Saat berubah dari AppCompatActivity (atau subkelas, ActionBarActivity), untuk Activity, juga harus mengubah berbagai panggilan dengan "dukungan" ke panggilan yang sesuai tanpa "mendukung". Jadi, bukannya getSupportFragmentManager, hubungi getFragmentManager.


974
2018-02-16 17:48



Yang perlu Anda lakukan hanyalah menambahkan android:theme="@style/Theme.AppCompat.Light" ke tag aplikasi Anda di AndroidManifest.xml mengajukan.


463
2017-09-04 10:44



Menyalin jawaban dari @MarkKeen di komentar di atas karena saya memiliki masalah yang sama.

Saya memiliki kesalahan yang dinyatakan di bagian atas pos dan terjadi setelah saya menambahkan dialog peringatan. Saya memiliki semua informasi gaya yang relevan dalam manifes. Masalah saya disembuhkan dengan mengubah referensi konteks di pembuat lansiran - saya mengubah:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

untuk:

new android.support.v7.app.AlertDialog.Builder(this)

Dan tidak ada masalah lagi.


164
2017-09-03 10:43



sdk min adalah 10. ActionBar tersedia dari level api 11. Jadi untuk 10 Anda akan menggunakan AppCompat dari pustaka dukungan yang perlu Anda gunakan Theme.AppCompat atau keturunan yang sama.

Menggunakan

android:theme="@style/Theme.AppCompat" >

Atau jika Anda tidak ingin bilah tindakan di bagian atas

android:theme="@style/Theme.AppCompat.NoActionBar">

Info lebih lanjut @

http://developer.android.com/guide/topics/ui/actionbar.html

Edit:

Saya mungkin salah membaca pos op.

Sepertinya op menginginkan Dialog dengan Tema Kegiatan. Jadi seperti yang sudah disarankan oleh Bobbake4 memperpanjang Activity dari pada ActionBarActivity.

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/values/themes.xml/


82
2018-02-16 17:36



Ini berhasil bagi saya, saya baru saja berubah:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

untuk ini:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

61
2017-10-21 20:27



Saya mengalami masalah ini meskipun Tema saya adalah sebuah AppCompat Tema dan Aktivitas saya adalah sebuah AppCompatActivity (atau Activity, seperti yang disarankan pada jawaban orang lain). Jadi saya membersihkan, membangun kembali dan menjalankan kembali proyek tersebut.

(Build -> Clean Project; Build -> Rebuild Project; Run -> Run)

Itu mungkin tampak bodoh, tapi sekarang bekerja dengan baik!

Semoga saja itu membantu!


30
2018-04-29 05:10



Ini yang memperbaikinya untuk saya: alih-alih menentukan tema dalam manifes, saya mendefinisikannya onCreate untuk setiap aktivitas yang meluas ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Sini MyAppTheme adalah keturunan dari Theme.AppCompat, dan didefinisikan dalam xml. Perhatikan bahwa tema harus ditetapkan sebelumnya super.onCreate dan setContentView.


22
2018-01-14 21:37



pergi ke gaya Anda dan menempatkan orang tua

parent="Theme.AppCompat"

dari pada

parent="@android:style/Theme.Holo.Light"

17
2017-12-03 10:45