যদি এটি কিছু নতুন দেবের কাজে আসে তবে এটি উপরে বর্ণিত নয়। খুব স্পষ্টভাবে বলতে গেলে:
কনফিগারেশন চেঞ্জ করা থাকলে আপনার দুটি জিনিস দরকার :
onConfigurationChangedআপনার ক্রিয়াকলাপ শ্রেণিতে একটি পদ্ধতি
আপনার পদ্ধতিতে কোন কনফিগারেশন পরিবর্তনগুলি পরিচালনা করা হবে তা আপনার ম্যানিফেস্টে উল্লেখ করুনonConfigurationChanged
উপরের উত্তরগুলিতে ম্যানিফেস্ট স্নিপেট, যদিও কোনও নির্দিষ্ট অ্যাপ্লিকেশন যা ম্যানিফেস্টের সাথে সম্পর্কিত তা সন্দেহজনক নয়, তবে আপনার ক্রিয়াকলাপ শ্রেণিতে অনকফিজারেশন পরিবর্তিত পদ্ধতিটি ট্রিগার করতে আপনার ম্যানিফেস্টে আপনাকে যা যুক্ত করতে হবে তা ঠিক তা নয় । যেমন নীচের ম্যানিফেস্ট এন্ট্রি আপনার অ্যাপ্লিকেশনটির জন্য সঠিক নাও হতে পারে।
<activity name= ".MainActivity" android:configChanges="orientation|screenSize"/>
উপরোক্ত ম্যানিফেস্ট এন্ট্রিতে, বিভিন্ন অ্যান্ড্রয়েড ক্রিয়া রয়েছে android:configChanges=""যার জন্য আপনার ক্রিয়াকলাপটি লাইফসাইলে অনক্রিটকে ট্রিগার করতে পারে।
এটি অত্যন্ত গুরুত্বপূর্ণ - ম্যানিফেস্টে নির্দিষ্ট নয় এমনগুলি হ'ল যা আপনার অনক্রিটকে ট্রিগার করে এবং ম্যানিফেস্টে নির্দিষ্ট onConfigurationChangedহওয়াগুলি হ'ল এটি আপনার ক্রিয়াকলাপ শ্রেণিতে আপনার পদ্ধতিটি ট্রিগার করে ।
সুতরাং আপনাকে নিজেরাই হ্যান্ডেল করার জন্য কোন কনফিগার পরিবর্তনগুলি সনাক্ত করতে হবে। আমার মতো অ্যানড্রইড এনসাইক্লোপিডিক্যালি চ্যালেঞ্জের জন্য, আমি অ্যান্ড্রয়েড স্টুডিওতে দ্রুত ইঙ্গিতগুলি পপ-আউট ব্যবহার করেছি এবং প্রায় প্রতিটি সম্ভাব্য কনফিগারেশন বিকল্পে যুক্ত করেছি। এই সব তালিকা মূলত বলেন যে আমি হ্যান্ডেল করবে সবকিছু এবং onCreate কনফিগারেশনের জন্য তিনি কোনদিন বলা হবে।
<activity name= ".MainActivity" android:configChanges="screenLayout|touchscreen|mnc|mcc|density|uiMode|fontScale|orientation|keyboard|layoutDirection|locale|navigation|smallestScreenSize|keyboardHidden|colorMode|screenSize"/>
এখন স্পষ্টতই আমি সবকিছু পরিচালনা করতে চাই না, তাই আমি একবারে উপরের বিকল্পগুলি অপসারণ শুরু করেছি। প্রতিটি অপসারণের পরে আমার অ্যাপ্লিকেশনটি পুনর্নির্মাণ এবং পরীক্ষণ।
আরেকটি গুরুত্বপূর্ণ বিষয় : যদি কেবলমাত্র একটি কনফিগারেশন বিকল্প যদি স্বয়ংক্রিয়ভাবে পরিচালনা করা হয় যা আপনার অনক্রিটকে ট্রিগার করে (আপনার উপরে এটির উপরে প্রকাশিত তালিকা নেই) তবে এটি প্রদর্শিত হবে onConfigurationChangedযেমন কাজ করছে না। আপনার অবশ্যই সমস্ত প্রাসঙ্গিক ব্যক্তিকে আপনার ম্যানিফেস্টে রেখে দেওয়া উচিত।
আমি 3 টি দিয়ে শেষ করেছিলাম যা মূলত অনক্রিটকে ট্রিগার করেছিল, তারপরে আমি একটি এস 10 + তে পরীক্ষা করেছিলাম এবং আমি এখনও অনক্রিট পেয়ে যাচ্ছিলাম, তাই আমাকে আবার আমার নির্মূলের মহড়াটি করতে হয়েছিল এবং আমারও এটির দরকার ছিল |screenSize। সুতরাং প্ল্যাটফর্মের একটি নির্বাচন পরীক্ষা করুন।
<activity name= ".MainActivity" android:configChanges="screenLayout|uiMode|orientation|screenSize"/>
সুতরাং আমার পরামর্শ, যদিও আমি নিশ্চিত যে এটির মধ্যে কেউ ছিদ্র করতে পারে:
onConfigurationChangedএকটি টোস্ট বা এলওজি দিয়ে আপনার ক্রিয়াকলাপ শ্রেণিতে আপনার পদ্ধতিটি যুক্ত করুন যাতে এটি কখন কাজ করে তা আপনি দেখতে পারেন।
আপনার ম্যানিফেস্টে সমস্ত সম্ভাব্য কনফিগারেশন বিকল্প যুক্ত করুন।
onConfigurationChangedআপনার অ্যাপটি পরীক্ষা করে আপনার পদ্ধতিটি কাজ করছে তা নিশ্চিত করুন।
প্রত্যেকের পরে আপনার অ্যাপ্লিকেশনটি পরীক্ষা করে একবারে আপনার ম্যানিফেস্ট ফাইল থেকে প্রতিটি কনফিগার বিকল্প অপসারণ করুন।
যতটা সম্ভব বড় বড় বিভিন্ন ডিভাইস পরীক্ষা করুন।
উপরে আমার স্নিপেটটি আপনার ম্যানিফেস্ট ফাইলটিতে কপি / পেস্ট করবেন না। অ্যান্ড্রয়েড আপডেটগুলি তালিকা পরিবর্তন করে, তাই আপনি সেগুলি পেয়েছেন তা নিশ্চিত করতে পপ-আউট অ্যান্ড্রয়েড স্টুডিও ইঙ্গিতগুলি ব্যবহার করুন।
আমি আশা করি এটি কারও কিছুটা সময় সাশ্রয় করেছে।
আমার onConfigurationChangedপদ্ধতিটি কেবল নীচের তথ্যের জন্য। নতুন অভিযোজন উপলব্ধ হওয়ার পরেonConfigurationChanged লাইফসাইকেলে ডাকা হয় তবে ইউআই পুনরায় তৈরি করার আগে । সুতরাং ওরিয়েন্টেশনটি পরীক্ষা করার জন্য আমার প্রথমটি সঠিকভাবে কাজ করে এবং তারপরে ২ য় নেস্টেড আমার ইউআই ইমেজভিউয়ের দৃশ্যমানতাটিও সঠিকভাবে কাজ করে।ifif
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
pokerCardLarge = findViewById(R.id.pokerCardLgImageView);
if(pokerCardLarge.getVisibility() == pokerCardLarge.VISIBLE){
Bitmap image = ((BitmapDrawable)pokerCardLarge.getDrawable()).getBitmap();
pokerCardLarge.setVisibility(pokerCardLarge.VISIBLE);
pokerCardLarge.setImageBitmap(image);
}
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
pokerCardLarge = findViewById(R.id.pokerCardLgImageView);
if(pokerCardLarge.getVisibility() == pokerCardLarge.VISIBLE){
Bitmap image = ((BitmapDrawable)pokerCardLarge.getDrawable()).getBitmap();
pokerCardLarge.setVisibility(pokerCardLarge.VISIBLE);
pokerCardLarge.setImageBitmap(image);
}
}
}