2015-04-22 12 views
325

Yeni çıkarılan v22.1.0 AppCompat'ı kullanmak için uygulamamı yeni sürüme geçirdim ve şimdi açtığımda şu istisnaları alıyorum benim uygulamamAppCompat v22.1.0 sürümüne yükseltildi ve şimdi IllegalArgumentException alıyorum: AppCompat geçerli tema özelliklerini desteklemiyor

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features 
     at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:360) 
     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246) 
     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 

Nasıl düzeltilir?

cevap

503

AppCompat artık tema penceresi bayraklarında beklediklerine göre daha sıkıdır, çerçeveden ne alacağınıza daha yakından bakar.

Bunun arkasındaki temel neden, bu sürümde de eklediğimiz AppCompatDialogs desteğidir. AppCompat'ın daha önce hiç dikkat etmediği windowNoTitle bayrağını ağır bir şekilde kullanıyorlar.

kolay yolu sadece ana tema olarak Theme.AppCompat.NoActionBar kullanmaktır:

Yani sorunu çözmek için iki seçeneğiniz vardır. Bu her zaman doğru olanı yapar.

Eğer (belki eylem bar ve herhangi bir işlem çubuğu desteklemek gerekir) olsa da, aşağıdakileri yapmanız gerektiğini yapamıyorsan:

<style name="MyTheme" parent="Theme.AppCompat"> 
    ... 
</style> 

<style name="MyTheme.NoActionBar"> 
    <!-- Both of these are needed --> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

Şimdi geri yolda olmalıdır.

+129

Bu bilgiyi appcompat sürüm notlarına sahip olmak daha iyidir;) –

+2

Temam tema içerir.AppCompat.Light.NoActionBar. Bir PreferenceActivity içinde temsilci sürümünü kullanmaya çalışıyorum ve hala bu özel durumu görüyorum ... =/ – niqueco

+42

Her iki seçeneği de denedikten sonra istisna hala devam ederse, etkinliğinizin super.onCreate sonra setContentView çağırdığından emin olun, önce değil. Daha önce başka amaçlar için aradım ama hatayı önlemek için onu değiştirmek zorunda kaldım. – jmart

0

Sadece

public class Main extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
+10

Dikkat edin ki OP kütüphanenin yazarı ve hemen kendi sorusunu cevapladı – auval

13

Ben

eklendi bırakın lütfen

<style name="AppTheme" parent="Theme.AppCompat"> 

    <!-- theme customizations --> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

etkinlik dosyasına bir şey katmayın başka hiçbir düzenleme gereklidir değerler-V21 klasöründe senin style.xml bu kullanmak

ama yeterli değildi. Son olarak Faaliyet içinde setContentView önce super.onCreate hareketli - sorunumu :) sabit

public void onCreate(Bundle savedInstanceState) {  

     super.onCreate(savedInstanceState);  
     setContentView(R.layout.v2_main_dash); 
     ... 
+0

Mükemmel. Teşekkürler – formica

+0

OnCreate sonra hareketli setContentView cevabını buldu, yarım gün için onunla mücadele ediyorum ... – Oliv

33

hala o düzeltmenin sonuçta hata alıyorsanız olanlar.

Theme.AppCompat.Light.NoActionBar 

devralan ve sonra, herhangi bir hata almazsınız

<item name="windowActionBar">false</item> 

lütfen kullanmayın.

+0

sen benim gün kurtardı! – varunkr

+0

Bu doğru cevap! – Eagle

+0

sağ şimdi, teşekkürler –

İlgili konular