এই ক্রিয়াকলাপ সহ আপনার একটি থিম.অ্যাপকম্প্যাট থিম (বা বংশধর) ব্যবহার করা দরকার


1004

অ্যান্ড্রয়েড স্টুডিও 0.4.5

কাস্টম সংলাপ বাক্সগুলি তৈরি করার জন্য অ্যান্ড্রয়েড ডকুমেন্টেশন: 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
@ রঘুনন্দন, আমি এতে নতুন কিন্তু আমার শৈলীর দিকে তাকিয়ে আমার কাছে নিম্নলিখিতগুলি রয়েছে: <শৈলীর নাম = "অ্যাপ থিম" প্যারেন্ট = "থিম। .app.ActionBarActivity; আমদানি android.support.v7.app.ActionBar; আমদানি android.support.v4.app.Fraament; তবে নিশ্চিত নয় যে এগুলি কী বোঝায়।
ant2009

10
আপনি AppCompatএপিআই স্তরের নীচে অ্যাকশনবারগুলিকে সমর্থন করার জন্য যা সমর্থন লাইব্রেরিটি গঠন করছেন তা ব্যবহার করছেন ১১ টি android:theme="@style/AppTheme" >প্রকাশের ক্রিয়াকলাপের জন্য কেবল ব্যবহার করুন
রঘুনন্দন

2
@ অ্যান্ট ২০০৯, @ রঘুনন্দন যা বলেছিলেন তা স্পষ্ট করতে: AndroidManifest.xmlআপনার ক্রিয়াকলাপের জন্য আপনি যে থিমটি নির্দিষ্ট করছেন তার থিমটি আপনি যে অ্যাপ্লিকেশনের জন্য নির্দিষ্ট করছেন সেটিকে ওভাররাইড করছে। ট্যাগ android:themeথেকে লাইন সরান <activity>
cryptochronoconolite

3
এটি করা ত্রুটিটি সরিয়ে ফেলবে তবে তাকে সেখান থেকে পাবেন না যেখানে ডায়ালগ থিম সহ একটি ক্রিয়াকলাপ। সাধারণ নিয়মটি হ'ল আপনি যদি নিজের ক্রিয়াকলাপটিতে অ্যাকশন বার রাখতে চান তবে এতে অ্যাপকম্প্যাট থিম থাকা উচিত এবং জাভা কোডটি অ্যাকশনবার্টিভিটি বাড়ানো উচিত। আপনার যদি এমন ক্রিয়াকলাপ থাকে যা অ্যাকশন বারের প্রয়োজন নেই (ডায়লগ থিমযুক্ত ক্রিয়াকলাপের মতো) আপনি এটিতে যে কোনও থিম প্রয়োগ করতে পারেন তবে জাভা কোডটিতে অবশ্যই পুরানো ক্রিয়াকলাপ প্রসারিত করতে হবে।
ববকে 4

1
আমি মনে করি এই ক্ষেত্রে একমাত্র সমস্যা হ'ল ডায়লগ কনট্রাক্টরের জন্য আপনার প্রদত্ত প্রসঙ্গ। আমার উত্তর দেখুন। স্ট্যাকওভারফ্লো.
com/a/

উত্তর:


1123

আপনার এই সমস্যাটির কারণ হ'ল কারণ আপনি যে ক্রিয়াকলাপটি ডায়ালগ থিমটি প্রয়োগ করার চেষ্টা করছেন সেটি প্রসারিত হচ্ছে ActionBarActivityযার জন্য AppCompatথিমটি প্রয়োগ করা প্রয়োজন।

আপডেট : প্রসারিত করার AppCompatActivityক্ষেত্রেও এই সমস্যা হবে

এই ক্ষেত্রে, থেকে জাভা উত্তরাধিকার পরিবর্তন ActionBarActivityকরতে Activityএকটি অ এবং ম্যানিফেস্টে ডায়ালগ থিম ছেড়ে যেমন তা না হয়, Theme.AppCompatমান


সাধারণ নিয়মটি হ'ল আপনি যদি নিজের কোডটি অ্যান্ড্রয়েডের পুরানো সংস্করণ সমর্থন করতে চান তবে এটিতে AppCompatথিম থাকা উচিত এবং জাভা কোডটি প্রসারিত হওয়া উচিত AppCompatActivity। আপনার যদি এমন কোনও ক্রিয়াকলাপ থাকে যা এই সমর্থনটির প্রয়োজন হয় না, যেমন আপনি কেবলমাত্র সর্বশেষ সংস্করণ এবং অ্যান্ড্রয়েডের বৈশিষ্ট্যগুলি সম্পর্কে যত্নশীল হন তবে আপনি এটিতে কোনও থিম প্রয়োগ করতে পারেন তবে জাভা কোডটি অবশ্যই পুরানো প্রসারিত করতে হবে Activity


দ্রষ্টব্য: যখন AppCompatActivity(বা একটি সাবক্লাস ActionBarActivity) থেকে পরিবর্তন করা হয় তখন Activity"সমর্থন" ছাড়াই সংশ্লিষ্ট কলটিতে "সমর্থন" সহ বিভিন্ন কলগুলিও পরিবর্তন করতে হবে । সুতরাং, পরিবর্তে getSupportFragmentManager, কল getFragmentManager


6
ওপ অ্যাপকম্প্যাট ব্যবহার করছে কোন ক্ষেত্রে তার প্রসারিত হওয়া উচিত ActionBarActivityযা কোয়েস্টিটনের নীচে মন্তব্য থেকে তার আমদানির বিবৃতি থেকে দেখানো হয়েছে।
রঘুনন্দন

2
@ ব্রুরোস আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে একটি নতুন প্রকল্প তৈরি করেন তখন আপনি যদি কথা বলছেন তবে আমি অনুমান করছি যে এটি স্ট্যান্ডার্ড কনফিগারেশনের একটি বাগ।
ববকে 4

2
@ ববকে ৪, আমারও একই সমস্যা রয়েছে এবং এই সমাধানটি আমার পক্ষে কাজ করা অসম্ভব। বিষয়টি হ'ল আমি ক্রিয়াকলাপটি প্রসারিত করতে পারি না, কারণ আমার কাছে ক্লাসগুলির একটি গোছা রয়েছে (পুরো প্রকল্প) যা অ্যাকশনবার্টিভিটিতে রিলে রয়েছে। সমস্যার আর কোন সমাধান আছে কি? Thx
5er

6
@ 5er আপনার জাভা যদি অ্যাকশনবার্টিভিটি ব্যবহার করে তবে থিমটি থিম অবশ্যই বাড়িয়ে তুলবে App অ্যাপকম্প্যাট। থিমগুলিতে প্রচুর পরিমাণে অন্তর্নির্মিত রয়েছে যা থিম.অ্যাপকম্প্যাটকে প্রসারিত করে বা আপনি নিজে নিজে এটিকে প্রসারিত ও সংশোধন করতে পারেন। অ্যাকশনবার্টিভিটি পিতামাতার অপসারণ ছাড়াই আপনি থিম.অ্যাপকম্প্যাটটি ব্যবহার করতে পারবেন না।
ববকে

26
শৈলীতে <শৈলীর নাম = "AppTheme" প্যারেন্ট = "থিম। :)
হরমিত সিং

545

আপনাকে যা করতে হবে তা হ'ল ফাইলটিতে android:theme="@style/Theme.AppCompat.Light"আপনার অ্যাপ্লিকেশন ট্যাগ যুক্ত করা AndroidManifest.xml


2
কোডটিতে, ant2009 অ্যাপ্লিকেশন হিসাবে অ্যাপ্লিকেশন সেট করেছে যা থিম.অ্যাপকম্পটের বংশধর থেকে প্রসারিত। এটা কাজ করা উচিত। আমার ডিভাইসে 5.0-তে আপগ্রেড করার পরেও আমার একই সমস্যা ছিল এবং আমার ক্রিয়াকলাপের থিম হিসাবে @ শৈলী / থিম.অ্যাপকম্প্যাট.লাইট স্থাপন করা শেষ হয়েছিল। এখানে ঠিক কিছু নেই ...
স্পিডিয়েনমডস

36
এটি অ্যান্ড্রয়েড স্টুডিওর জন্য বৈধ উত্তর নয়, যদিও কিছু ক্ষেত্রে এটি স্টাইল.এক্সএমএল ফাইলগুলি বাইপাস করার সময় এটি দ্রুত সমাধান হিসাবে কাজ করবে। অ্যান্ড্রয়েড স্টুডিওতে থিম সংজ্ঞায়নের যথাযথ উপায় হ'ল স্টাইল.এক্সএমএল ফাইলগুলিতে তাদের সংজ্ঞা দেওয়া এবং তারপরে অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলটি কেবল তাদের উল্লেখ করে এবং আপনার ডিভাইসে আপনি কোন অ্যান্ড্রয়েড সংস্করণ চালাচ্ছেন তার ভিত্তিতে সেগুলি নির্বাচন করবে। সাধারণত এটি অ্যান্ড্রয়েডে সেট করা হয়: থিম = "@ শৈলী / অ্যাপপ্লেম" এবং এই অ্যাপ্লিকেশনটি <শৈলীর নাম = "থিম.অপটেম" পিতামাতার = "থিম.অ্যাপকম্প্যাট.লাইট"> কে স্টাইলস.এক্সএমএল
জিশনে

5
এটি আমার পক্ষে সত্যই কার্যকর হয়নি কারণ আমি যখন হোলো ব্যতীত অন্য কিছু ব্যবহার করি তখন আমার শিরোনাম বারগুলি অদৃশ্য হয়ে যায় ...
AndyD273

1
স্নাকবারটি ব্যবহার করার পাশাপাশি এই সমস্যাটি ছড়িয়ে পড়ে। এটি আমার সমস্যা সমাধান করেছে।
কাজ করেছে

2
@ মার্টিন আপনি যদি আমার মতো হন তবে সাধারণ ফাইল স্টাইলস.এক্সএমএল (ভি 21) স্টাইলস.এক্সএমএল ফাইল (ভি 21-র নির্দিষ্ট বৈশিষ্ট্য ব্যতীত) রাখার চেয়ে আপনি একই স্টাইলের নাম যুক্ত করতে ভুলে গেছেন। আপনি যদি ভি 21 ফোল্ডারে কোনও স্টাইল ঘোষণা করেন এবং আপনার ডিভাইসের নীচে একটি সংস্করণ রয়েছে। এটি খুঁজে পাচ্ছে না তাই ব্যতিক্রম বরখাস্ত।
লেট্রোল

275

আমার উপরে একই সমস্যা হওয়ায় উপরের মন্তব্যে @ মার্ককিনের কাছ থেকে উত্তর অনুলিপি করা হচ্ছে।

পোস্টের শীর্ষে আমার ত্রুটিটি ছিল এবং আমি একটি সতর্কতা ডায়ালগ যুক্ত করার পরে ঘটেছিলাম। আমি ম্যানিফেস্টে প্রাসঙ্গিক সমস্ত ধরণের তথ্য আছে। সতর্কতা বিল্ডারে একটি প্রসঙ্গ রেফারেন্স পরিবর্তন করে আমার সমস্যা নিরাময় হয়েছে - আমি পরিবর্তন করেছি:

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

প্রতি:

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

এবং আর কোনও সমস্যা নেই।


5
এটা আমার সাথেও হয়েছিল। আমি কেবল চেষ্টা করছিলাম এবং আপনার উত্তরটি সত্যই কার্যকর হয়েছিল! এটি কাজ করার জন্য যুক্তি কি? আমি সত্যিই বুঝতে পারি নি।
কীর্তন 403

6
অথবা, যদি আপনি সরাসরি কোনও ক্রিয়াকলাপের পরিবর্তে কোনও খণ্ডে আপনার সতর্কতা ডায়ালগ তৈরি করে থাকেন তবে উপরে প্রস্তাবিত getActivity()পরিবর্তে ব্যবহার করুন thisএবং সমস্যাটি স্থির হয়েছে। কেন কেবল, আমি কেবল পুরানো অ্যালার্টডায়ালগ.বিল্ডার (এক্সএক্সএক্স) কোডটি অন্যরকম প্রেরণ করতে চেয়েছি বা কী পাস হয়েছে সে সম্পর্কে খুব কম পিক ছিল, যখন বর্তমান বিল্ডার () সত্যই সত্যই একটি কার্যকলাপ চায়। গুগল যেহেতু পুরাতন কোডটির জন্য ডকুমেন্টেশনগুলি গোপন (অপসারণ?) বেছে নিয়েছে, সম্ভবত v7.app সংস্করণটি ব্যবহার করতে উত্সাহিত করার প্রয়াসে, আমি নিশ্চিতভাবে বলার কোনও উপায় জানি না।
অ্যান গুন

যা প্রস্তাবিত হয়েছে তার বিপরীতে করেছেন। এবং এটি কাজ করেছে: পি। ধন্যবাদ!
হারিসেওয়াক

1
এটি আমার জন্য প্রোগ্রামটি সমাধান করে, আপনি যদি কোনও অ্যারেএডাপ্টার বা অনুরূপ অ্যাডাপ্টারের শ্রেণীর অভ্যন্তরে থাকেন তবে getContext()পরিবর্তে আপনি ব্যবহার করতে পারেন this
ইব্রাহিম.এইচ

1
এটিই আমার আসল আসল সমাধান। টিআইপি: দয়া করে getapplicationContext () এবং এই উদ্দেশ্যে এই পার্থক্য উল্লেখ করুন।
প্রেজিভ

109

মিনিট এসডিকে ১০. ActionBarএপিআই স্তর থেকে পাওয়া যায় ১১। সুতরাং 10 এর জন্য আপনি AppCompatসমর্থন লাইব্রেরি ব্যবহার করছেন যার জন্য আপনাকে Theme.AppCompatএকই বা তার বংশধর ব্যবহার করতে হবে ।

ব্যবহার

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

অথবা আপনি যদি শীর্ষে অ্যাকশন বারটি চান না

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

অধিক তথ্য @

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

সম্পাদনা:

আমি অপ পোস্ট অপঠিত হতে পারে।

মনে হচ্ছে ওপেন একটি ক্রিয়াকলাপ থিম সহ একটি ডায়ালগ চায়। সুতরাং ইতিমধ্যে প্রস্তাবিত Activityপরিবর্তে ববকে 4 প্রসারিত করুন 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/


পরামর্শের জন্য ধন্যবাদ. আমি ইতিমধ্যে বাস্তবে চেষ্টা করেছিলাম। এবং আমি একই সমস্যা পেয়েছি। আমার স্টাইলগুলির ফাইলটি এর মতো দেখাচ্ছে: <শৈলীর নাম = "AppTheme" প্যারেন্ট = "থিম। অ্যাপকম্প্যাট">
ant2009

@ ant2009 আপনি পাবেন না। আপনার কার্যকলাপের জন্য সমর্থন লাইব্রেরি AppCompat থেকে একটি থিম ব্যবহার করুন
রঘুনন্দন

আমি নিশ্চিত না যে আমি এই থিমটি সঠিকভাবে যুক্ত করছি কিনা। তবে আপনি কি নীচের আমদানির বিবৃতি যুক্ত করতে চান? আমদানি android.support.v7.appcompat। *; যাইহোক, আমি এটি চেষ্টা করেছিলাম এবং আমি এখনও একই ব্যতিক্রমটি শেষ হয়ে যাওয়ায় ভুল হতে পারি।
ant2009

@ ant2009 আপনি একটি কাস্টম সংলাপ করতে পারেন। তবে আপনি কি পুরো পর্দার সংলাপ করতে চান?
রঘুনন্দন

আমি এটি পূর্ণ পর্দা পেতে চাই না। শুধু একটি কথোপকথন বাক্স। তবে সমস্যাটি এখনই সমাধান হয়ে গেছে। ববকে 4 এটি ঠিক আছে। যাইহোক আপনার চেষ্টা করার জন্য ধন্যবাদ, আপনি দরকারী পরামর্শ দিয়েছেন। তবে আমি এখনও এই সমস্ত সমর্থন লাইব্রেরি এবং অ্যাপকম্প্যাট নিয়ে বিভ্রান্ত used
ant2009

99

আপনি যদি অ্যাপ্লিকেশন প্রসঙ্গটি ব্যবহার করেন তবে এটির মতো:

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

এটিকে কোনও ক্রিয়াকলাপের প্রসঙ্গে এটি পরিবর্তন করুন:

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

আপনি যদি LayoutInflater.from (<অ্যাপ্লিকেশন প্রসঙ্গ>) ব্যবহার করছেন তবে একই বিষয় নিশ্চিত করুন যে আপনি ক্রিয়াকলাপের প্রসঙ্গ বা প্রদত্ত লেআউটআইনফ্লেটার ব্যবহার করেছেন যাতে এটি সঠিক থিমের উত্তরাধিকারী হয়।
lbarbosa

1
আপনার সমাধান আমার ক্ষেত্রে আমাকে সহায়তা করেছিল। GetApplicationContext () এবং MainActivity.this এর মধ্যে কোন পার্থক্যটি আপনি ব্যাখ্যা করতে পারেন?
Kostyabakay

: এই লিঙ্ক পড়ুন stackoverflow.com/questions/22966601/...
Darush


এই সমাধানটি সমাধান করে
মোহাম্মদ আমিন

45

যদিও আমার থিমটি একটি থিম ছিল AppCompatএবং আমার ক্রিয়াকলাপটি একটি AppCompatActivity(বা Activityঅন্যের উত্তরে প্রস্তাবিত হিসাবে) ছিল তবুও আমি এই সমস্যাটি অনুভব করছিলাম । তাই আমি প্রকল্পটি পরিষ্কার, পুনর্নির্মাণ এবং পুনরায় চালিত করেছি।

( বিল্ড -> ক্লিন প্রকল্প; বিল্ড -> পুনর্নির্মাণ প্রকল্প; রান -> রান )

এটি বোবা মনে হতে পারে, তবে এখন এটি দুর্দান্ত কাজ করে !

আশা করি এটি সাহায্য করে!


1
অ্যাপকম্প্যাট ক্রিয়াকলাপে ডায়ালগফ্রেগমেন্ট যুক্ত করার পরে ঠিক একই বার্তা ছিল। ফাইল, অকার্যকর ক্যাশে / পুনঃসূচনা এটি একটি চিমটি মধ্যে স্থির করে।

2
আমি এই থ্রেডে প্রায় সমস্ত উত্তর চেষ্টা করেছিলাম। তবে কেবল এই আপাতদৃষ্টিতে "বোবা" উত্তর কাজ করে। ধন্যবাদ!
ডিকা 16 ই

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, এবং এক্সএমএল সংজ্ঞায়িত করা হয়। উল্লেখ্য থিম সামনে সেট করা আবশ্যক যে super.onCreateএবং setContentView


1
সংস্থানটি লোড করার চেষ্টা করার সময় রোবলেট্রিক সেটটেম লাইনে একটি নালপয়েন্টার এক্সসেপশন নিক্ষেপ করছে। কোন ধারণা কেন?
রাইস ডেভিস

@ রাইসড্যাভিস স্ট্যাক ট্রেস ছাড়াই বলা মুশকিল, তবে সম্ভবত এটি প্রথমে সেটকন্টেন্টভিউ চায়? সেক্ষেত্রে এই ফিক্সটি আপনার পক্ষে কার্যকর হবে না।
29

19

আপনার শৈলীতে যান এবং পিতামাতাকে রাখুন

parent="Theme.AppCompat"

পরিবর্তে

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

কেন আমরা একটি মানক ক্রিয়াকলাপ সহ এটি করতে পারি। অ্যান্ড্রয়েড আইসিএস বা হোনাকম্বের সাহায্যে স্ট্যান্ডার্ড ক্রিয়াকলাপগুলিতে অ্যাকশন বারগুলি রাখেনি? যদি আমরা এসডিকে আইসিএসে আমাদের ন্যূনতম লক্ষ্য নির্ধারণ করি তবে আমাদের কী সর্বদা অ্যাকশনবার্তাটি ব্যবহার করতে হবে?
অ্যান্ড্রু এস

আমরা যে ধরণের থিম বা বৈশিষ্ট্যটি ব্যবহার করছি তা কীভাবে আমাদের ব্যবহার করা উচিত তা দেখার জন্য কারণ আমরা যখন আমদানি করি তখন আমাদের কাছে সমস্ত প্রকার থিম উপলব্ধ থাকে
ব্ল্যাকহক

16

আমার ক্ষেত্রে আমার রেজ ডিরেক্টরিতে কোনও মান-ভি 21 ফাইল নেই। তারপরে আমি এটিকে তৈরি করে নিম্নলিখিত কোডগুলিতে যুক্ত করেছি:

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

আমি আমার প্রকল্পটি ওরিও + ডিভাইসে চালাচ্ছি এবং এটি কেবল আমার জন্য কাজ করেছে।
নিশান্ত সনি

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 (এটি ) এবং কোনও সমস্যা নেই ...
মার্ক কেইন

এই অপ্টিমাইজেশন সম্পর্কে আপনার কাছে আর কোনও বিবরণ বা সামসংয়ের লিঙ্ক রয়েছে? তাহলে কি সমস্ত ক্রিয়াকলাপ থিম.এপকম্প্যাট বাস্তবায়ন করতে হবে বা থিম ছাড়া কোনও ক্রিয়াকলাপ থাকতে পারে?
আভেরিন

13

আপনার যদি অ্যাকশনবার্টিভিটি বাড়ানোর দরকার হয় তবে আপনার স্টাইল.এক্সএমএল এ আপনার প্রয়োজন:

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

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

আপনি Android যেমন আপনার আবেদনের মূল থিম হিসেবে সেট করেন তাহলে: পরিবর্তে Theme.Material.Light AppTheme.Base তারপর আপনি পাবেন একটি "IllegalStateException: আপনি এই কার্যকলাপ সঙ্গে একটি Theme.AppCompat থিম (অথবা বংশধর) ব্যবহার করতে হবে" ত্রুটি।


13

শুধু কর

new AlertDialog.Builder(this)

পরিবর্তে

new AlertDialog.Builder(getApplicationContext())

কাজের সমাধান! এই উত্তরটি খুঁজে পেতে 30 মিনিট। কেন আমি নতুন সতর্কতা ডায়ালগ.বিল্ডার (getApplicationContext ()) ব্যবহার করছি?
এরিচ গার্সিয়া

কী ধরণের thisপ্রত্যাশা রয়েছে তা ব্যাখ্যা করতে এটি সহায়ক হবে।
ব্লাগো

12

আমারও একই সমস্যা ছিল, তবে আমি সমাধান হিসাবে এটিকে সমাধান করলে তা সমাধান হয়েছে: অ্যান্ড্রয়েড: থিম = "@ শৈলী / থিম App অ্যাপকম্প্যাট।

    <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 () পাশ করছিলাম তবে আপনার কৌশলটি সফল হয়েছিল
Jeeva

9

<android:theme="@android:style/Theme.Dialog">আমার অ্যাপ উইজেটে ডায়ালগ প্রদর্শনের জন্য ব্যবহৃত থিম সহ আমার একটি ক্রিয়াকলাপ ছিল এবং আমারও একই সমস্যা ছিল

আমি নীচের মত ক্রিয়াকলাপ কোড পরিবর্তন করে এই ত্রুটিটি সমাধান করেছি:

@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

আমার জন্য কনটেক্সট থেমর্যাপার ব্যবহার করার সমাধান ছিল:

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

এবং সর্বশেষে, (যদি আপনার প্রকল্পের অন্যান্য ক্লাস না থাকে যা ভি 7 অ্যাপকম্প্যাট ব্যবহার করে থাকে) আপনি নিজের প্রকল্পটি পরিষ্কার বা পুনর্নির্মাণ করতে পারেন বা অ্যাপ্লিকেশন স্তরের গ্রেড বিল্ড ফাইলটিতে এই প্রবেশটি মুছতে পারেন:

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

যদি আপনার প্রকল্পে অন্যান্য ক্লাস থাকে যা ভি 7 অ্যাপকম্প্যাট ব্যবহার করতে হয় তবে কেবল প্রকল্পটি পরিষ্কার এবং পুনর্নির্মাণ করুন।


6

কারণ আপনার 21. আগের SDK সংস্করণে আপনার থিম শৈলী মেটারিয়াল ডিজাইন প্রয়োগ করতে চান আপনি এই এসেছিলেন আছে ActionBarActivityপ্রয়োজন AppThemeতাই যদি আপনি আপনার AppTheme সম্পর্কে আপনার নিজস্ব স্বনির্ধারণ প্রতিরোধ করতে চান, শুধুমাত্র আপনি আপনার styles.xml পরিবর্তন করতে হবে (পূর্ববর্তী 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

অ্যান্ড্রয়েড ম্যানিফেস্টে ক্রিয়াকলাপের থিমটি অ্যাপ থিমে অনুসরণ করুন কোড স্নিপেট অনুসরণ করুন

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

<ক্রিয়াকলাপ অ্যান্ড্রয়েড: নাম = "। মাইনএকটিভিটি" অ্যান্ড্রয়েড: লেবেল = "@ স্ট্রিং / অ্যাপ_নাম" অ্যান্ড্রয়েড: থিম = "@ শৈলী / অ্যাপ থিম"> </activity>
শিখা

6

এটি যখন আপনি কোনও খণ্ডে একটি সতর্কতা ডায়ালগ চান This

            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

আমার অভিজ্ঞতায় সমস্যাটি সেই প্রসঙ্গে ছিল যেখানে আমি আমার সংলাপটি দেখিয়েছি। একটি বোতামের ভিতরে ক্লিক করে আমি এইভাবে একটি সতর্কতা ডায়ালগ ইনস্ট্যান্ট করি:

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

তবে প্রসঙ্গটি সঠিক ছিল না এবং ত্রুটির কারণ হয়েছিল। আমি এটিকে প্রয়োগের প্রসঙ্গটি ব্যবহার করে এটি পরিবর্তন করেছি:

বিভাগে ঘোষণা করুন:

Context mContext;

অনক্রিট পদ্ধতিতে

mContext = this;

এবং পরিশেষে কোডটি যেখানে আমার সতর্কতা ডায়ালগ প্রয়োজন:

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 প্রয়োগ করতে হবে। অ্যাকশনবার অ্যাক্টিভিটি থেকে ক্রিয়াকলাপ বা ফ্র্যাগমেন্টএক্টিভিটিতে পরিবর্তন করুন এটি সমস্যার সমাধান করবে।

আপনি যদি কোনও অ্যাকশন বার ব্যবহার না করেন তবে:

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

5

আমি একই সমস্যা পেয়েছিলাম। কারণ আমি কাস্টম নেভিগেশন ড্রয়ার তৈরি করছিলাম। তবে আমি আমার ম্যানিফেস্টে থিমটি উল্লেখ করতে ভুলে গেছি

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

যত তাড়াতাড়ি আমি উপরোক্ত থিমটি আমার প্রকাশ্যে যুক্ত করেছি এটি সমস্যার সমাধান করেছে resolved


4

দ্রুত সমাধান।

আপনার বেস থিম পিতামাতার স্টাইল.এক্সএমএল পরিবর্তন করুন

থেকে প্রতিস্থাপন

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

প্রতি

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

আমাকে সহায়তা করে না, ব্যতিক্রমটি এখনও ট্রিগার করে
ইউজিন গ্র। ফিলিপভ

3

এই সমাধানটি আমার পক্ষে কাজ করেছিল।

ডিজাইন লাইব্রেরি সাপোর্ট ভি 4 এবং অ্যাপকম্প্যাট সাপোর্ট লাইব্রেরিগুলির উপর নির্ভর করে তাই গ্রেডে অ্যাপকম্প্যাট এবং ডিজাইনের লাইব্রেরির জন্য আলাদা সংস্করণ ব্যবহার করবেন না।

ব্যবহার

 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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.