AppCompat v22.1.0 में अपग्रेड किया गया और अब IllegalArgumentException प्राप्त करना: AppCompat वर्तमान थीम सुविधाओं का समर्थन नहीं करता है


336

मैंने अभी हाल ही में जारी v22.1.0 AppCompat का उपयोग करने के लिए अपने ऐप को अपग्रेड किया है और जब मैं अपना ऐप खोलूंगा तो मुझे निम्न अपवाद मिलेंगे।

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)

मैं इसे कैसे ठीक करूं?

जवाबों:


515

AppCompat अब विषय विंडो झंडे में क्या उम्मीद करता है, उस पर अधिक सख्त है, जो आपको फ्रेमवर्क से मिलेगा।

इसके पीछे मुख्य कारण AppCompatDialogs का समर्थन करना है जिसे हम इस रिलीज़ में भी जोड़ रहे थे। वे windowNoTitleध्वज का भारी उपयोग करते हैं , जिसे AppCompat ने पहले ध्यान नहीं दिया था।

तो अपने मुद्दे को ठीक करने के लिए आपके पास दो विकल्प हैं:

आसान तरीका यह है कि सिर्फ Theme.AppCompat.NoActionBarअपने मूल विषय के रूप में उपयोग करें। यह हमेशा सही काम करेगा।

यदि आप ऐसा नहीं कर सकते हैं (हो सकता है कि आपको एक्शन बार और कोई एक्शन बार का समर्थन करने की आवश्यकता हो), तो आपको निम्नलिखित कार्य करने चाहिए:

<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>

अब आपको वापस ट्रैक पर होना चाहिए।


129
Appcompat release के नोट्स में यह जानकारी होना बेहतर है;)
Veaceslav Gaidarji

42
अगर किसी को पता चलता है कि दोनों विकल्पों को आज़माने के बाद भी अपवाद बना हुआ है, तो सुनिश्चित करें कि आपकी गतिविधि super.onCreate के बाद setContentView कह रही है, पहले नहीं। मैंने इसे अन्य उद्देश्यों के लिए पहले बुलाया था, लेकिन त्रुटि से बचने के लिए मुझे इसे बदलना पड़ा।
jmart

27
मेरे मामले में मुझे <आइटम का नाम = "android: windowNoTitle"> true </ आइटम> बदलना पड़ा, जिसे मैंने अपवाद से छुटकारा पाने के लिए पहले <item name = "windowNoTitle"> true </ आइटम> में परिभाषित किया था।
मीनमैन

12
@ क्रिसबेंस: आपने Google में एंड्रॉइड के साथ काम किया- हो सकता है कि आप टीम को भविष्य में अधिक गहन रिलीज़ नोट्स जारी करने के लिए राजी कर सकें। इस तरह, एंड्रॉइड डेवलपर्स इसे संकलन समय पर त्रुटियों पर ठोकर खाने के बजाय एंड्रॉइड डिज़ाइन विशेषताओं के साथ त्रुटियों को डीबग करने के लिए उपयोग कर सकते हैं।

3
ध्यान दें कि संभवतः आपको मुख्य शैलियों / थीम XML फ़ाइल और v21 संस्करण में यह परिवर्तन करना होगा। मुझे पकड़ा।
rfay

34

जो उन सभी को ठीक करने के बाद भी त्रुटि प्राप्त कर रहे हैं।

कृपया से विरासत में मिला

Theme.AppCompat.Light.NoActionBar

और उपयोग नहीं करते

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

फिर, आपको कोई त्रुटि नहीं मिलेगी।


महान उत्तर +1
सैंडिपमाराम

13

मैंने कहा

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

लेकिन यह पर्याप्त नहीं था। अंत में, गतिविधि में setContentView से पहले super.onCreate को स्थानांतरित करना - मेरा मुद्दा तय किया गया :)

   public void onCreate(Bundle savedInstanceState) {    

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

शुक्र है कि onCreate के बाद आपको setContentView को स्थानांतरित करने का आपका उत्तर मिल गया, मैं इससे आधे दिन तक
जूझता रहा

0

बस इसे अपने style.xmlमानों में उपयोग करें-v21 फ़ोल्डर में किसी अन्य संपादन की आवश्यकता नहीं है

 <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>

गतिविधि फ़ाइल में कुछ भी न जोड़ें कृपया इसे छोड़ दें

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);
    }
}

11
ध्यान दें कि ओपी पुस्तकालय का लेखक है, और अपने स्वयं के प्रश्न का तुरंत उत्तर दिया है
अमीर उल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.