आपको इस गतिविधि के साथ एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है


1004

एंड्रॉइड स्टूडियो 0.4.5

कस्टम संवाद बॉक्स बनाने के लिए Android प्रलेखन: http://developer.android.com/guide/topics/ui/dialogs.html

यदि आप एक कस्टम संवाद चाहते हैं, तो आप डायलॉग एपीआई का उपयोग करने के बजाय एक गतिविधि को संवाद के रूप में प्रदर्शित कर सकते हैं। बस एक गतिविधि बनाएं और थीम में उसका विषय निर्धारित <activity>करें।

<activity android:theme="@android:style/Theme.Holo.Dialog" >

हालाँकि, जब मैंने इसकी कोशिश की तो मुझे निम्नलिखित अपवाद मिले:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

मैं निम्नलिखित का समर्थन कर रहा हूं, और मैं मिनट के लिए 10 से अधिक का उपयोग नहीं कर सकता हूं:

minSdkVersion 10
targetSdkVersion 19

मेरी शैलियों में मेरे पास निम्नलिखित हैं:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

और मेरे प्रदर्शन में इस गतिविधि के लिए मेरे पास है:

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

इस तरह संवाद बॉक्स बनाना कुछ ऐसा था जिसे मैं करना चाहता था, क्योंकि मैंने पहले ही लेआउट पूरा कर लिया है।

क्या कोई मुझे बता सकता है कि मैं इस समस्या के आसपास कैसे पहुंच सकता हूं?


2
@ रघुनंदन, मैं इसके लिए नया हूं, लेकिन मेरी शैलियों को देखते हुए मेरे पास निम्नलिखित हैं: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> और मेरे पास निम्न आयात हैं: android.support.v7 .app.ActionBarActivity; आयात android.support.v7.app.ActionBar; आयात android.support.v4.app.Fragment; लेकिन यह निश्चित नहीं है कि यह सब क्या है।
ant2009

10
आप AppCompatएआई स्तर से नीचे एक्शनबार का समर्थन करने के लिए समर्थन पुस्तकालय के रूप में उपयोग कर रहे हैं । 11. android:theme="@style/AppTheme" >प्रकट में गतिविधि के लिए उपयोग करें
रघुनंदन

2
@ ant2009, @Raghunandan ने जो कहा, उसे स्पष्ट करने के लिए: AndroidManifest.xmlजिस विषय में आप अपनी गतिविधि के लिए निर्दिष्ट कर रहे हैं, वह उस विषय को ओवरराइड कर रहा है जिसे आप अपने आवेदन के लिए निर्दिष्ट कर रहे हैं। टैग android:themeसे लाइन हटाएं <activity>
क्रिप्टोकरंसीकोनाईलाइट

3
ऐसा करने से त्रुटि दूर हो जाएगी लेकिन उसे वह नहीं मिलेगा जहां वह होना चाहता है जो एक संवाद विषय के साथ एक गतिविधि है। सामान्य नियम यह है कि यदि आप चाहते हैं कि आपकी गतिविधि में एक्शन बार हो तो इसके लिए AppCompat विषय होना चाहिए और जावा कोड को ActionBarActivity का विस्तार करना चाहिए। यदि आपके पास एक गतिविधि है, जिसमें एक्शन बार (जैसे एक संवाद थीम्ड गतिविधि) की आवश्यकता नहीं है, तो आप इसे किसी भी विषय पर लागू कर सकते हैं, लेकिन जावा कोड को सादे पुरानी गतिविधि का विस्तार करना होगा।
Bobbake4

1
मुझे लगता है कि इस मामले में एकमात्र समस्या आपके द्वारा डायलॉग बाधा के लिए प्रदान किया गया संदर्भ है। मेरा जवाब देखिए। stackoverflow.com/a/51574281/232727
विटाली ए

जवाबों:


1123

आपके पास यह समस्या होने का कारण यह है कि आप जिस गतिविधि को डायलॉग थीम को लागू करने का प्रयास कर रहे हैं वह विस्तारित हो रही है ActionBarActivityजिसके लिए AppCompatविषय को लागू करने की आवश्यकता है।

अद्यतन : विस्तार में AppCompatActivityभी यह समस्या होगी

इस मामले में, से जावा विरासत को बदलने ActionBarActivityके लिए Activityएक गैर और प्रकट में संवाद विषय वैसा ही छोड़ दें, Theme.AppCompatमूल्य


सामान्य नियम यह है कि यदि आप चाहते हैं कि आपका कोड एंड्रॉइड के पुराने संस्करणों का समर्थन करे, तो इसके पास AppCompatथीम होनी चाहिए और जावा कोड का विस्तार होना चाहिए AppCompatActivity। यदि आपके पास * एक गतिविधि है जिसे इस समर्थन की आवश्यकता नहीं है, जैसे कि आप केवल नवीनतम संस्करणों और एंड्रॉइड की विशेषताओं के बारे में परवाह करते हैं, तो आप इसे किसी भी विषय पर लागू कर सकते हैं, लेकिन जावा कोड को सादे पुराने का विस्तार करना होगा Activity


नोट: जब AppCompatActivity(या एक उपवर्ग ActionBarActivity) से, को Activity, "समर्थन" के साथ विभिन्न कॉल को "समर्थन" के बिना संबंधित कॉल में भी बदलना होगा । इसलिए, getSupportFragmentManagerकॉल के बजाय getFragmentManager


6
सेशन एपकॉम का उपयोग कर रहा है, जिस स्थिति में उसे विस्तार करना चाहिए, ActionBarActivityजो कि उसके आयात के बयान से नीचे दिए गए टिप्पणी से दिखाया गया है।
रघुनंदन

2
@ बर्सोस यदि आप एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाते समय बात कर रहे हैं, तो मुझे लगता है कि मानक कॉन्फ़िगरेशन में एक बग है।
Bobbake4

2
@ Bobbake4, Im एक ही समस्या है, और यह समाधान मेरे लिए काम करना असंभव है। बात यह है कि मैं गतिविधि का विस्तार नहीं कर सकता, क्योंकि मेरे पास कक्षाओं (पूरी परियोजना) का एक समूह है जो ActionBarActivity पर रिले करता है। क्या समस्या का कोई और समाधान है? Thx
5er

6
@ 5er यदि आपका Java ActionBarActivity का उपयोग कर रहा है, तो थीम को Theme.AppCompat को विस्तारित करना होगा। वहाँ मुट्ठी भर में निर्मित विषय हैं जो Theme.AppCompat का विस्तार करते हैं या आप इसे स्वयं बढ़ा सकते हैं और इसे संशोधित कर सकते हैं। ActionBarActivity पैरेंट को हटाए बिना आप Theme.AppCompat का उपयोग कर प्राप्त नहीं कर सकते।
Bobbake4

26
शैली में <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> इसने मेरी समस्या हल कर दी। :)
हरमीत सिंह

545

आपको बस फ़ाइल android:theme="@style/Theme.AppCompat.Light"में अपने एप्लिकेशन टैग को जोड़ना होगा AndroidManifest.xml


2
कोड में, ant2009 ने AppTheme को उन एप्लिकेशन के रूप में सेट किया है जो उन्हें Theme.AppCompat के वंशज से मिलता है। वह काम करना चाहिए। मुझे अपने डिवाइस पर 5.0 में अपग्रेड करने के बाद एक ही समस्या थी और मेरी गतिविधि पर थीम के रूप में @ स्टाइल / थीम.AppCompat.Light सेट करना समाप्त कर दिया। यहाँ कुछ ठीक नहीं है ...
speedynomads

36
यह एंड्रॉइड स्टूडियो के लिए एक वैध उत्तर नहीं है, हालांकि कुछ मामलों में यह एक स्टाइलिस्ट को बायपास करते समय त्वरित सुधार के रूप में काम करेगा। एंड्रॉइड स्टूडियो में, थीम को परिभाषित करने का उचित तरीका है कि उन्हें स्टाइल.एक्सएमएल फाइलों में परिभाषित किया जाए, और फिर एंड्रॉइड मेनिफेस्ट फाइल केवल उन्हें संदर्भित करेगी, और उन्हें चुनें कि आपके डिवाइस पर कौन सा एंड्रॉइड संस्करण चल रहा है। आमतौर पर यह करने के लिए एंड्रॉयड के लिए निर्धारित है: विषय = "@ शैली / AppTheme" और इस AppTheme styles.xml में <शैली नाम = "Theme.AppTheme" जनक = "Theme.AppCompat.Light"> को संदर्भित करता है
जीशान

5
यह वास्तव में मेरे लिए काम नहीं करता था क्योंकि मेरे टाइटल बार गायब हो जाते थे जब मैं कुछ भी इस्तेमाल करता था लेकिन होलो ...
एंडी 2727

1
इस मुद्दे पर SnackBar का उपयोग करके भाग गया। इससे मेरी समस्या हल हो गई।
काम किया

2
@ मेरी तरह यदि आप मेरे जैसे हैं, तो आप सामान्य फ़ाइल स्टाइल में एक ही शैली का नाम जोड़ना भूल गए हैं। xml आपके द्वारा (V21) style.xml फ़ाइल में डाल दिया गया है (V21 के लिए विशिष्ट गुणों के बिना)। यदि आप V21 फ़ोल्डर में एक शैली घोषित करते हैं और आपके डिवाइस के नीचे एक संस्करण है। यह नहीं मिल सकता है तो एक अपवाद निकाल दिया है।
8

275

ऊपर टिप्पणी में @MarkKeen से नकल का जवाब के रूप में मैं एक ही समस्या थी।

मुझे पोस्ट के शीर्ष पर त्रुटि बताई गई थी और अलर्ट डायलॉग जोड़ने के बाद हुआ था। मुझे प्रकट में सभी प्रासंगिक शैली की जानकारी है। अलर्ट बिल्डर में एक संदर्भ संदर्भ बदलने से मेरी समस्या ठीक हो गई - मैंने बदल दिया:

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

सेवा:

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

और कोई समस्या नहीं।


5
मेरे साथ भी यही हुआ। मैं बस कोशिश कर रहा था और आपके जवाब ने वास्तव में काम किया! काम करने के लिए क्या तर्क है? मुझे सच में समझ नहीं आया।
कीर्तनबर्ग

6
या, यदि आप अपने AlertDialog का निर्माण किसी गतिविधि में सीधे करने के getActivity()बजाय , thisऊपर दिए गए सुझाव के बजाय उपयोग करते हैं और समस्या ठीक हो गई है। क्यों के लिए, मैं केवल पुराने AlertDialog.Builder (xxx) कोड को सुरक्षित कर सकता हूं या तो एक अलग प्रकार पारित करना चाहता था, या बस जो पास हो गया था उसके बारे में कम picky था, जबकि वर्तमान बिल्डर () वास्तव में, वास्तव में एक गतिविधि चाहता है। चूंकि Google ने पुराने कोड के लिए दस्तावेज़ीकरण को छिपाना (हटाना) चुना है, संभवतः v7.app संस्करण के उपयोग को प्रोत्साहित करने के प्रयास में, मुझे यकीन है कि यह बताने का कोई तरीका नहीं है।
ऐनी गुन

जो सुझाया गया है उसके विपरीत किया। और यह काम किया: पी। धन्यवाद!
हरिसेवक

1
इस कार्यक्रम मेरे लिए, यह भी आप का प्रयोग करेंगे का समाधान getContext()करने के बजाय thisअगर आप एक ArrayAdapter या इसी तरह एडाप्टर वर्ग के अंदर कर रहे हैं।
इब्राहिम

1
यह वास्तविक समाधान है जो मैं कभी मिलता हूं। TIP: कृपया इस उद्देश्य में getApplicationContext () और इस अंतर का उल्लेख करें।
prazeev

109

मिनट sdk 10 ActionBarहै। एपीआई स्तर 11 से उपलब्ध है। इसलिए 10 के लिए आप AppCompatसमर्थन पुस्तकालय से उपयोग कर रहे होंगे , जिसके लिए आपको Theme.AppCompatउसी के वंशज का उपयोग करना होगा ।

उपयोग

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

या यदि आप शीर्ष पर एक्शन बार नहीं चाहते हैं

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

और जानकारी @

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

संपादित करें:

मेरे पास गलत पोस्ट हो सकते हैं।

लगता है एक गतिविधि विषयक के साथ एक संवाद चाहता है। तो जैसा कि पहले से ही Bobbake4 ने सुझाव दिया था कि Activityइसके बजाय विस्तार करें ActionBarActivity

नीचे दिए गए लिंक में एक नज़र @ संवाद विशेषताएँ भी हैं

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


सलाह के लिये धन्यवाद। मैंने कोशिश की कि पहले से ही वास्तव में। और मुझे वही समस्या हुई। मेरी शैलियाँ फ़ाइल इस तरह दिखती हैं: <style name = "AppTheme" parent = "Theme.AppCompat">
ant2009

@ ant2009 आप नहीं करेंगे। अपनी गतिविधि के लिए समर्थन पुस्तकालय AppCompat से एक थीम का उपयोग करें
रघुनंदन

मुझे यकीन नहीं है कि मैं इस विषय को सही जोड़ रहा हूं। लेकिन क्या आपका मतलब निम्न आयात कथन को जोड़ना है? import android.support.v7.appcompat। *; हालाँकि, मैंने कोशिश की थी और शायद मैं गलत हूं क्योंकि मैं अभी भी उसी अपवाद के साथ समाप्त हुआ।
ant2009

@ ant2009 आप एक कस्टम संवाद हो सकता है। लेकिन क्या आप पूर्ण स्क्रीन संवाद करना चाहते हैं?
रघुनंदन

मैं इसे पूरी स्क्रीन नहीं करना चाहता था। बस एक संवाद बॉक्स। हालाँकि, अब समस्या हल हो गई है। Bobbake4 ने इसे सही पाया। वैसे भी आपके लिए धन्यवाद, आपने उपयोगी सलाह दी है। हालाँकि, मैं अभी भी इस सभी समर्थन पुस्तकालय और AppCompat के साथ भ्रमित हूँ।
ant2009

99

यदि आप इस तरह से अनुप्रयोग संदर्भ का उपयोग कर रहे हैं:

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

इसे गतिविधि के संदर्भ में इस तरह बदलें:

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

वही यदि आप LayoutInflater.from (<aplication reference>) का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप गतिविधि संदर्भ या प्रदत्त लेआउटइन्फ़्लैटर का उपयोग करते हैं ताकि यह सही थीम के साथ हो।
लार्बोसा

1
आपके समाधान ने मेरे मामले में मेरी मदद की। क्या आप बता सकते हैं कि getApplicationContext () और MainActivity.this में क्या अंतर है?
kostyabakay 14

इस लिंक का उल्लेख करें: stackoverflow.com/questions/22966601/…
दारुश

9
डायलॉग प्रदर्शित करने के लिए आपको एक गतिविधि की आवश्यकता है, संदर्भ की नहीं
behelit

यह समाधान इसे हल करता है
मोहम्मद अमीन

45

मैं इस समस्या का सामना कर रहा था, भले ही मेरा विषय एक थीम था AppCompatऔर मेरी गतिविधि एक थी AppCompatActivity(या Activity, जैसा कि अन्य उत्तरों पर सुझाव दिया गया है)। इसलिए मैंने इस परियोजना की सफाई, पुनर्निर्माण और पुनर्मिलन किया।

( निर्माण -> स्वच्छ परियोजना; निर्माण -> पुनर्निर्माण परियोजना; भागो -> भागो )

यह गूंगा लग सकता है, लेकिन अब यह बहुत अच्छा है !

बस उम्मीद है कि यह मदद करता है!


1
AppCompat गतिविधि में DialogFragment जोड़ने के बाद सटीक संदेश था। फ़ाइल, अमान्य कैश / पुनः आरंभ करें कि एक चुटकी में तय की।
आधा

2
मैंने इस धागे में लगभग सभी उत्तरों की कोशिश की। लेकिन केवल यह प्रतीत होता है कि "गूंगा" उत्तर काम करता है। धन्यवाद!
दीका

27

यह वही है जो मेरे लिए तय किया गया है: मैंने विषय को प्रकट में निर्दिष्ट करने के बजाय, इसे onCreateविस्तारित करने वाली प्रत्येक गतिविधि के लिए परिभाषित किया है ActionBarActivity:

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

यहाँ MyAppThemeएक वंशज है Theme.AppCompat, और xml में परिभाषित किया गया है। ध्यान दें कि विषय को पहले super.onCreateऔर सेट किया जाना चाहिए setContentView


1
Robolectric संसाधन को लोड करने का प्रयास करते समय सेटटेम लाइन पर NullPointerException को फेंक रहा है। कोई विचार क्यों?
रईस डेविस

@RhysDavis स्टैक ट्रेस के बिना कहना मुश्किल है, लेकिन शायद यह setContentView पहले चाहता है? उस स्थिति में यह फिक्स आपके काम नहीं आएगा।
k29

19

अपनी शैलियों पर जाएं और माता-पिता को डालें

parent="Theme.AppCompat"

के बजाय

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

हम एक मानक गतिविधि के साथ ऐसा क्यों कर सकते हैं। क्या Android ने ICS या Honecomb के साथ मानक गतिविधियों पर एक्शन बार नहीं लगाए? अगर हमें अपना न्यूनतम लक्ष्य SDK ICS में सेट करना है, तो क्या हमें हमेशा ActionBarActivity का उपयोग करना होगा?
एंड्रयू एस

हम किस प्रकार की थीम का उपयोग कर सकते हैं, यह देखने के लिए कि हम किस प्रकार या फीचर का उपयोग कर रहे हैं क्योंकि जब हम आयात करते हैं तो हमारे पास सभी प्रकार के थीम उपलब्ध होते हैं
ब्लैकहॉक

16

मेरे मामले में मेरे पास मेरी res निर्देशिका में कोई मान-v21 फ़ाइल नहीं है। फिर मैंने इसे बनाया और इसमें निम्नलिखित कोड जोड़े:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

मैं Oreo + उपकरणों पर अपनी परियोजना चला रहा था और केवल यही मेरे लिए काम कर रहा था।
निशांत सोनी

16

वांछित गतिविधि का विषय बदलें। यह मेरे लिए काम करता है:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

14

मैं सैमसंग उपकरणों पर ऐसे दुर्घटनाग्रस्त हो गया था , हालांकि गतिविधि ने Theme.AppCompat का उपयोग किया था । मूल कारण सैमसंग की ओर से अजीब अनुकूलन से संबंधित था:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

मेरा हल सिर्फ निकाल रहा था android:launchMode="singleTask"


2
बस इस रूप में अच्छी तरह से भाग गया, मैंने फिक्स को मान्य नहीं किया है और त्रुटि को पुन: उत्पन्न नहीं कर सकता है .. लेकिन मैं केवल सैमसंग उपकरणों पर जंगली में इस त्रुटि को देख रहा हूं। के रूप में अच्छी तरह से निहित लग रहे हो, fwiw
danb

मेरे पास पोस्ट के शीर्ष पर बताई गई त्रुटि थी और अलर्ट डायलॉग जोड़ने के बाद हुआ। मुझे प्रकट में सभी प्रासंगिक शैली की जानकारी है। अलर्ट बिल्डर में एक संदर्भ संदर्भ बदलने से मेरी समस्या ठीक हो गई - मैंने बदल दिया: नया android.support.v7.app.AlertDialog.Builder (getApplicationContext ()): नया android.support.v7.app.AlertDialog.Builder (यह) ) और कोई समस्या नहीं ...
मार्क कीन

क्या आपके पास इस अनुकूलन के बारे में सैमसंग के पास कोई और विवरण या लिंक हैं? क्या सभी गतिविधियाँ तब Theme.AppCompat को लागू करना है या कोई थीम के साथ गतिविधियाँ हो सकती हैं?
एवरिन

13

यदि आपको ActionBarActivity का विस्तार करने की आवश्यकता है, तो आपको अपनी शैली पर ध्यान देना होगा।

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

यदि आप Android के रूप में अपने आवेदन के मुख्य विषय के रूप में सेट करते हैं: AppTheme.Base के बजाय Theme.Material.Light। तो आपको एक "IllegalStateException" मिलेगी: आपको इस गतिविधि के लिए एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है।


13

बस करो

new AlertDialog.Builder(this)

के बजाय

new AlertDialog.Builder(getApplicationContext())

काम कर रहे समाधान! इस जवाब के साथ पता लगाने के लिए 30 मिनट। क्यों मैं नए AlertDialog.Builder (getApplicationContext ()) का उपयोग कर रहा हूं?
एरिच गार्सिया

यह समझाने में मदद मिलेगी कि किस प्रकार के thisहोने की उम्मीद है।
ब्लागो

12

मुझे भी यही समस्या थी, लेकिन जब मैंने इसे प्रकट किया तो यह हल हो गया: Android: theme = "@ style / Theme.AppCompat।

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>

10

मेरे मामले में ऐसा मुद्दा सामने आया जब मैंने डायलॉग दिखाने की कोशिश की। समस्या संदर्भ में थी, मैं getBaseContext () का उपयोग करता हूं, जिसे सैद्धांतिक रूप से गतिविधि संदर्भ वापस करना चाहिए, लेकिन किसी भी थीम के लागू होने से पहले इसका संदर्भ नहीं दिखता है।

इसलिए मैंने बस " यह " के साथ getBaseContexts () को बदल दिया , और अब यह उम्मीद के मुताबिक काम करता है।

        Dialog.showAlert(this, title, message,....);

मैं getApplicaitonContext () पास कर रहा था, लेकिन तुम्हारा चाल चली थी
जीव

9

मेरे पास <android:theme="@android:style/Theme.Dialog">अपने AppWidget में संवाद दिखाने के लिए उपयोग की जाने वाली थीम के साथ एक गतिविधि थी और मुझे भी यही समस्या थी

मैंने नीचे दिए गए गतिविधि कोड को बदलकर इस त्रुटि को हल किया:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}

2
यह एक सीधा जवाब था जो मेरे लिए स्वीकार किए गए सभी जटिलता और गैर-जवाब के बिना काम करता था।
Cory Trese

8

मेरे लिए ContextThemeWrapper का उपयोग करने का समाधान था:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

से एंड्रॉयड - कैसे फैब प्रोग्राम के रूप में बनाने के लिए?


8

सुनिश्चित करें कि आप एक नया अलर्ट डायलॉग बनाते समय गतिविधि संदर्भ का उपयोग कर रहे हैं, न कि एप्लिकेशन या आधार संदर्भ।


7

मुझे भी यह समस्या थी और मैंने इसे ठीक करने के लिए क्या किया था, और अभी भी होलो थीम का उपयोग इन कदमों को करने के लिए किया गया था:

पहले मैंने इस आयात को प्रतिस्थापित किया:

import android.support.v7.app.AppCompatActivity;

इसके साथ:

import android.app.Activity;

फिर से मेरा एक्सटेंशन बदल दिया गया:

public class MyClass extends AppCompatActivity {//...

इसके लिए:

public class MyClass extends Activity {//...

और इस आयात को बदलना भी पड़ा:

import android.support.v7.app.AlertDialog;

इस आयात के लिए:

import android.app.AlertDialog;

और फिर आप गतिविधि स्तर पर प्रकट में अपने थीम टैग का उपयोग कर सकते हैं:

android:theme="@android:style/Theme.Holo.Dialog" />

और अंत में, (जब तक कि आपके प्रोजेक्ट में अन्य कक्षाएं जो v7 appCompat का उपयोग करने के लिए है) आप या तो अपनी परियोजना को साफ और पुनर्निर्माण कर सकते हैं या ऐपल स्तर पर ग्रेडल बिल्ड फ़ाइल में इस प्रविष्टि को हटा सकते हैं:

compile 'com.android.support:appcompat-v7:23.2.1'

यदि आपके पास अपनी परियोजना में अन्य वर्ग हैं जिन्हें v7 appCompat का उपयोग करना है तो बस परियोजना को साफ और पुनर्निर्माण करें।


6

क्योंकि आप 21 करने के लिए पिछले sdk वर्शन में अपने विषय शैली में मटीरियल डिज़ाइन लागू करना चाहते हैं तो आप इस के लिए आया था है ActionBarActivityकी आवश्यकता है AppTheme, इसलिए यदि आप भी अपने AppTheme के बारे में अपने स्वयं के अनुकूलन रोकना चाहते हैं, केवल आप अपने styles.xml में परिवर्तन करने के लिए है (पिछले sdk 21) तो इस तरह, एक ऐप कम्पेटिबल थीम के लिए इनहेरिट कर सकता है।

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

इसके लिए:

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

6
वह किया। अभी भी समस्या है। तो इसमें और भी बहुत कुछ है।
मार्टिन

6

अपनी थीम स्टाइल पैरेंट को बदलें

 parent="Theme.AppCompat"

यह मेरे लिए काम किया ...


6

आपके पास उस त्रुटि के कई समाधान हैं।

  1. आप का उपयोग करना चाहिए गतिविधि या FragmentActivity बजाय ActionbarActivity या AppCompatActivity

  2. आप उपयोग करना चाहते हैं ActionbarActivity या AppCompatActivity , आप में बदलना चाहिए styles.xml Theme.Holo.xxxx को Theme.AppCompat.Light (यदि आवश्यक करने के लिए ऐड DarkActionbar )

आप कार्रवाई पट्टी या के बारे में उन्नत विशेषताओं की जरूरत नहीं है AppCompat आप का उपयोग करने की जरूरत नहीं Actionbar या AppCompat


6

Android मेनिफ़ेस्ट में कोड स्निपेट के रूप में AppTheme के लिए गतिविधि की थीम को बदलें

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>

<गतिविधि Android: नाम = एंड्रॉयड: लेबल = "@ स्ट्रिंग / app_name" एंड्रॉयड: विषय = "@ शैली / AppTheme" "MainActivity।"> </ गतिविधि>
शिखा

6

यह तब होता है जब आप एक फ़्रैगमेंट में एक अलर्टडायलॉग चाहते हैं

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();

6

मेरे अनुभवों में समस्या वह संदर्भ थी जहां मैंने अपना संवाद दिखाया। एक बटन के अंदर मैं इस तरह से एक AlertDialog पलटा:

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

लेकिन संदर्भ सही नहीं था और त्रुटि का कारण बना। मैंने इसे इस तरह एप्लिकेशन संदर्भ का उपयोग करके बदल दिया है:

घोषणा खंड में:

Context mContext;

ऑनक्रैट विधि में

mContext = this;

और अंत में उस कोड में जहां मुझे AlertDialog की आवश्यकता है:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

मेरे लिए यही उपाय है।


आप सही हैं कि आपको एप्लिकेशन संदर्भ का उपयोग नहीं करना चाहिए जिस तरह से आपके पास मूल रूप से था। आपने जो किया है वह इसके बजाय संदर्भ के रूप में एक गतिविधि का उपयोग करता है। हालाँकि, यह एक अनुप्रयोग संदर्भ या इसका एक उपवर्ग नहीं है। इसलिए यह कहना सही नहीं है कि आप एक अलग तरीके से एप्लिकेशन संदर्भ का उपयोग कर रहे हैं।
होड

5

यह एक मेरे लिए काम किया:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>

5

आपकी गतिविधि ActionBarActivity का विस्तार कर रही है जिसके लिए AppCompat.theme को लागू करने की आवश्यकता है। ActionBarActivity से गतिविधि या FragmentActivity में बदलें , यह समस्या को हल करेगा।

यदि आप एक्शन बार का उपयोग नहीं करते हैं:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 

5

मुझे भी यही समस्या हो रही थी। क्योंकि मैं कस्टम नेविगेशन ड्रॉअर बना रहा था। लेकिन मैं इस तरह अपने प्रकट रूप में विषय का उल्लेख करना भूल जाता हूं

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

जैसे ही मैंने उपरोक्त विषय को अपनी अभिव्यक्ति में जोड़ा, इससे समस्या हल हो गई।


4

त्वरित समाधान।

अपने बेस थीम पैरेंट को style.xml में बदलें

से प्रतिस्थापित करें

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

सेवा

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

मेरी मदद नहीं करता है, अपवाद अभी भी चलाता है
यूजीन जीआर। फिलिपोव

3

इस समाधान ने मेरे लिए काम किया।

डिज़ाइन लाइब्रेरी सपोर्ट v4 और AppCompat सपोर्ट लाइब्रेरी पर निर्भर करता है, इसलिए अपेकेल में अप्पमेकट और डिज़ाइन लाइब्रेरी के लिए अलग-अलग वर्जन का उपयोग न करें।

उपयोग

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

के बजाय

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.