Android Studio 0.4.5
Dokumentacija za Android za ustvarjanje pogovornih oken po meri: http://developer.android.com/guide/topics/ui/dialogs.html
Če želite pogovorno okno po meri, lahko namesto uporabe vmesnikov API za dialoge prikažete dejavnost kot pogovorno okno. Preprosto ustvarite dejavnost in nastavite njeno temo na Theme.Holo.Dialog v
manifestnem elementu <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Ko sem to poskusil, pa sem dobil naslednjo izjemo:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Podpiram naslednje in ne morem uporabiti nekaj večjega od 10 za min:
minSdkVersion 10
targetSdkVersion 19
V svojih slogih imam naslednje:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
In v mojem manifestu imam to za dejavnost:
<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>
Ustvarjanje takšnega pogovornega okna je bilo nekaj, na kar sem upal, saj sem že dokončal postavitev.
Ali mi lahko kdo pove, kako lahko obidem to težavo?
Težavo imate zato, ker dejavnost, za katero poskušate uporabiti temo pogovora, razširja dejavnost ActionBarActivity
, ki zahteva uporabo teme AppCompat
.
Posodobitev: Pri razširitvi AppCompatActivity
bi prav tako prišlo do te težave.
V tem primeru spremenite dedovanje Java iz ActionBarActivity
v Activity
in pustite temo dialoga v manifestu takšno, kot je, torej vrednost brez Theme.AppCompat
Splošno pravilo je, da če želite, da vaša koda podpira starejše različice sistema Android, mora imeti temo AppCompat
, koda java pa mora razširiti AppCompatActivity
. Če imate dejavnost, ki te podpore ne potrebuje, na primer, če vas zanimajo le najnovejše različice in funkcije sistema Android, lahko zanjo uporabite katero koli temo, vendar mora koda java razširiti navadno staro Activity
.
OPOMBA: Pri prehodu iz AppCompatActivity
(ali podrazreda, ActionBarActivity
) v Activity
je treba spremeniti tudi različne klice s "podporo" v ustrezne klice brez "podpore". Tako namesto getSupportFragmentManager
pokličite getFragmentManager
.
min sdk je 10. ActionBar
je na voljo na ravni api 11. Torej bi za 10 uporabljali AppCompat
iz podporne knjižnice, za katero morate uporabiti Theme.AppCompat
ali potomca te knjižnice.
Uporabite
android:theme="@style/Theme.AppCompat" >
Ali če ne želite akcijske vrstice na vrhu
android:theme="@style/Theme.AppCompat.NoActionBar">
Več informacij @
http://developer.android.com/guide/topics/ui/actionbar.html
Uredi:
Morda sem napačno prebral op post.
Zdi se, da op želi Dialog s temo dejavnosti. Torej, kot je že predlagal Bobbake4, razširite Activity
namesto ActionBarActivity
.
Prav tako si oglejte @ Dialog Attributes na spodnji povezavi
OPOMBA: To sem nameraval kot odgovor, vendar nadaljnje testiranje razkriva, da še vedno ne uspe, ko je zgrajen z uporabo maven iz ukazne vrstice, zato sem ga moral urediti, da bi bil problem! :-(
V mojem primeru, ko sem dobil to napako, sem že uporabljal temo AppCompat Theme in napaka ni imela veliko smisla.
Bil sem v postopku maveniziranja svoje androidne sestave. Imel sem že odvisnosti od različic apklib in jar za app compat, torej:
<!-- See https://github.com/mosabua/maven-android-sdk-deployer -->
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<version>${compatibility.version}</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v4</artifactId>
</dependency>
Zdaj, ko uvozim projekt maven ter ga sestavim in zaženem iz programa IntelliJ, je vse v redu.
Ko pa gradim in namestim ter zaženem iz ukazne vrstice s programom maven, še vedno dobim to izjemo.