অ্যাপ রিসোর্স ওভারভিউ

সম্পদ হল অতিরিক্ত ফাইল এবং স্ট্যাটিক কন্টেন্ট যা আপনার কোড ব্যবহার করে, যেমন বিটম্যাপ, লেআউট সংজ্ঞা, ইউজার ইন্টারফেস স্ট্রিং, অ্যানিমেশন নির্দেশাবলী এবং আরও অনেক কিছু।

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

একবার আপনি আপনার অ্যাপের সংস্থানগুলিকে বাহ্যিক করে নিলে, আপনি আপনার প্রকল্পের R ক্লাসে তৈরি রিসোর্স আইডিগুলি ব্যবহার করে সেগুলি অ্যাক্সেস করতে পারেন৷ এই নথিটি আপনাকে দেখায় কিভাবে আপনার Android প্রকল্পে সংস্থানগুলিকে গোষ্ঠীভুক্ত করতে হয়৷ এটি আপনাকে নির্দিষ্ট ডিভাইস কনফিগারেশনের জন্য বিকল্প সংস্থানগুলি কীভাবে সরবরাহ করতে হয় এবং তারপরে আপনার অ্যাপ কোড বা অন্যান্য XML ফাইলগুলি থেকে সেগুলি অ্যাক্সেস করতে হয় তাও দেখায়৷

গ্রুপ রিসোর্স প্রকার

আপনার প্রকল্পের res/ ডিরেক্টরির একটি নির্দিষ্ট সাবডিরেক্টরিতে প্রতিটি ধরনের রিসোর্স রাখুন। উদাহরণস্বরূপ, এখানে একটি সাধারণ প্রকল্পের জন্য ফাইলের অনুক্রমটি রয়েছে:

MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            graphic.png
        layout/
            main.xml
            info.xml
        mipmap/
            icon.png
        values/
            strings.xml

res/ ডিরেক্টরিতে এর সাব-ডিরেক্টরিতে সমস্ত সংস্থান রয়েছে: একটি ইমেজ রিসোর্স, দুটি লেআউট রিসোর্স, লঞ্চার আইকনগুলির জন্য একটি mipmap/ ডিরেক্টরি এবং একটি স্ট্রিং রিসোর্স ফাইল। রিসোর্স ডিরেক্টরির নামগুলি গুরুত্বপূর্ণ এবং সারণি 1 এ বর্ণনা করা হয়েছে।

দ্রষ্টব্য: মিপম্যাপ ফোল্ডারগুলি ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, মিপম্যাপ ডিরেক্টরিতে অ্যাপ আইকন রাখুন দেখুন।

সারণী 1. প্রজেক্ট res/ ডিরেক্টরির ভিতরে সমর্থিত রিসোর্স ডিরেক্টরি।

ডিরেক্টরি সম্পদের ধরন
animator/ XML ফাইল যা প্রপার্টি অ্যানিমেশন সংজ্ঞায়িত করে।
anim/ XML ফাইল যা টুইন অ্যানিমেশনকে সংজ্ঞায়িত করে। প্রপার্টি অ্যানিমেশনগুলিও এই ডিরেক্টরিতে সংরক্ষণ করা যেতে পারে, তবে animator/ ডিরেক্টরিটি দুটি প্রকারের মধ্যে পার্থক্য করার জন্য সম্পত্তি অ্যানিমেশনের জন্য পছন্দ করা হয়।
color/ XML ফাইল যা রঙের একটি রাষ্ট্রীয় তালিকা সংজ্ঞায়িত করে। আরও তথ্যের জন্য, রঙ রাজ্য তালিকা সংস্থান দেখুন।
drawable/

বিটম্যাপ ফাইলগুলি (PNG, .9.png , JPG, বা GIF) বা XML ফাইলগুলি যা নিম্নলিখিত অঙ্কনযোগ্য সংস্থান উপপ্রকারগুলিতে সংকলিত হয়:

  • বিটম্যাপ ফাইল
  • নয়-প্যাচ (পুনরায় আকারের বিটম্যাপ)
  • রাজ্যের তালিকা
  • আকার
  • অ্যানিমেশন অঙ্কনযোগ্য
  • অন্যান্য অঙ্কনযোগ্য

আরও তথ্যের জন্য, অঙ্কনযোগ্য সম্পদ দেখুন।

mipmap/ বিভিন্ন লঞ্চার আইকন ঘনত্বের জন্য অঙ্কনযোগ্য ফাইল। mipmap/ ফোল্ডার সহ লঞ্চার আইকন পরিচালনার বিষয়ে আরও তথ্যের জন্য, মিপম্যাপ ডিরেক্টরিতে অ্যাপ আইকন রাখুন দেখুন।
layout/ XML ফাইল যা একটি ব্যবহারকারী ইন্টারফেস বিন্যাস সংজ্ঞায়িত করে। আরও তথ্যের জন্য, লেআউট সংস্থান দেখুন।
menu/ XML ফাইল যা অ্যাপ মেনুকে সংজ্ঞায়িত করে, যেমন একটি বিকল্প মেনু, প্রসঙ্গ মেনু বা সাবমেনু। আরও তথ্যের জন্য, মেনু সংস্থান দেখুন।
raw/

নির্বিচারে ফাইল তাদের কাঁচা আকারে সংরক্ষণ করুন. একটি কাঁচা InputStream দিয়ে এই সংস্থানগুলি খুলতে, রিসোর্স আইডি সহ Resources.openRawResource() কল করুন, যা হল R.raw. filename

যাইহোক, যদি আপনার মূল ফাইলের নাম এবং ফাইলের অনুক্রমে অ্যাক্সেসের প্রয়োজন হয়, res/raw/ এর পরিবর্তে assets/ ডিরেক্টরিতে সম্পদ সংরক্ষণ করার কথা বিবেচনা করুন। assets/ একটি রিসোর্স আইডি দেওয়া হয় না, তাই আপনি শুধুমাত্র AssetManager ব্যবহার করে সেগুলি পড়তে পারেন।

values/

XML ফাইল যাতে সাধারণ মান থাকে, যেমন স্ট্রিং, পূর্ণসংখ্যা এবং রঙ।

যেখানে অন্যান্য res/ সাবডিরেক্টরিতে XML রিসোর্স ফাইলগুলি XML ফাইলের নামের উপর ভিত্তি করে একটি একক সংস্থান সংজ্ঞায়িত করে, সেখানে values/ ডিরেক্টরির ফাইলগুলি একাধিক সংস্থান বর্ণনা করে। এই ডিরেক্টরির একটি ফাইলের জন্য, <resources> উপাদানের প্রতিটি চাইল্ড একটি একক সম্পদ সংজ্ঞায়িত করে। উদাহরণস্বরূপ, একটি <string> উপাদান একটি R.string সম্পদ তৈরি করে এবং একটি <color> উপাদান একটি R.color সম্পদ তৈরি করে।

যেহেতু প্রতিটি সংস্থান তার নিজস্ব XML উপাদান দিয়ে সংজ্ঞায়িত করা হয়েছে, আপনি যা চান ফাইলটির নাম দিতে পারেন এবং একটি ফাইলে বিভিন্ন ধরণের সংস্থান রাখতে পারেন। যাইহোক, স্বচ্ছতার জন্য, আপনি বিভিন্ন ফাইলে অনন্য সম্পদের ধরন রাখতে চাইতে পারেন। উদাহরণস্বরূপ, আপনি এই ডিরেক্টরিতে তৈরি করতে পারেন এমন সংস্থানগুলির জন্য এখানে কিছু ফাইলের নাম কনভেনশন রয়েছে:

আরও তথ্যের জন্য, স্ট্রিং রিসোর্স , স্টাইল রিসোর্স এবং আরও রিসোর্স প্রকার দেখুন।

xml/ আরবিট্রারি এক্সএমএল ফাইল যা রানটাইমে Resources.getXML() কল করে পড়া যায়। বিভিন্ন XML কনফিগারেশন ফাইল অবশ্যই এখানে সংরক্ষণ করতে হবে, যেমন একটি অনুসন্ধান কনফিগারেশন
font/ TTF, OTF, বা TTC-এর মতো এক্সটেনশন সহ ফন্ট ফাইল, বা XML ফাইল যাতে <font-family> উপাদান থাকে। সম্পদ হিসাবে ফন্ট সম্পর্কে আরও তথ্যের জন্য, একটি XML সম্পদ হিসাবে একটি ফন্ট যুক্ত করুন দেখুন।

সতর্কতা: রিসোর্স ফাইলগুলি সরাসরি res/ ডিরেক্টরির মধ্যে সংরক্ষণ করবেন না। এটি একটি কম্পাইলার ত্রুটি সৃষ্টি করে।

স্বতন্ত্র ধরনের সংস্থান সম্পর্কে আরও তথ্যের জন্য, সম্পদের প্রকার ওভারভিউ দেখুন।

সারণী 1-এ সংজ্ঞায়িত সাবডিরেক্টরিতে আপনি যে সংস্থানগুলি সংরক্ষণ করেন তা হল আপনার ডিফল্ট সংস্থান। অর্থাৎ, এই সম্পদগুলি আপনার অ্যাপের জন্য ডিফল্ট ডিজাইন এবং বিষয়বস্তু নির্ধারণ করে। যাইহোক, বিভিন্ন ধরণের Android-চালিত ডিভাইসগুলি বিভিন্ন ধরণের সংস্থানগুলির জন্য কল করতে পারে।

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

বিকল্প সম্পদ সরবরাহ করুন

বেশিরভাগ অ্যাপ নির্দিষ্ট ডিভাইস কনফিগারেশন সমর্থন করার জন্য বিকল্প সংস্থান প্রদান করে। উদাহরণস্বরূপ, বিভিন্ন পর্দার ঘনত্বের জন্য বিকল্প অঙ্কনযোগ্য সংস্থান এবং বিভিন্ন ভাষার জন্য বিকল্প স্ট্রিং সংস্থান অন্তর্ভুক্ত করুন। রানটাইমে, Android বর্তমান ডিভাইস কনফিগারেশন সনাক্ত করে এবং আপনার অ্যাপের জন্য উপযুক্ত সংস্থানগুলি লোড করে৷

চিত্র 1. দুটি ডিভাইস পর্দার আকারের উপর ভিত্তি করে বিভিন্ন লেআউট সংস্থান ব্যবহার করে।

সংস্থানগুলির একটি সেটের জন্য কনফিগারেশন-নির্দিষ্ট বিকল্পগুলি নির্দিষ্ট করতে, নিম্নলিখিতগুলি করুন:

  1. <resources_name> - <qualifier> ফর্মে res/ নামে একটি নতুন ডিরেক্টরি তৈরি করুন।
    • <resources_name> হল সংশ্লিষ্ট ডিফল্ট সম্পদের ডিরেক্টরির নাম (সারণী 1 এ সংজ্ঞায়িত করা হয়েছে)।
    • <qualifier> একটি নাম যা একটি পৃথক কনফিগারেশন নির্দিষ্ট করে যার জন্য এই সম্পদগুলি ব্যবহার করা হবে (সারণী 2 এ সংজ্ঞায়িত)।

    আপনি একাধিক <qualifier> যোগ করতে পারেন। একটি ড্যাশ সঙ্গে প্রতিটি পৃথক.

    সতর্কতা: একাধিক কোয়ালিফায়ার যুক্ত করার সময়, আপনাকে অবশ্যই সেগুলিকে একই ক্রমে রাখতে হবে যে ক্রমে সেগুলি সারণী 2-এ তালিকাভুক্ত করা হয়েছে৷ যদি কোয়ালিফায়ারগুলি ভুলভাবে অর্ডার করা হয় তবে সংস্থানগুলি উপেক্ষা করা হয়৷

  2. এই নতুন ডিরেক্টরিতে উপযুক্ত বিকল্প সম্পদ সংরক্ষণ করুন। রিসোর্স ফাইলগুলিকে অবশ্যই ডিফল্ট রিসোর্স ফাইলগুলির মতোই নাম দিতে হবে৷

উদাহরণস্বরূপ, এখানে কিছু ডিফল্ট এবং বিকল্প সংস্থান রয়েছে:

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

hdpi কোয়ালিফায়ার নির্দেশ করে যে সেই ডিরেক্টরির সংস্থানগুলি উচ্চ-ঘনত্বের স্ক্রীন সহ ডিভাইসগুলির জন্য। এই অঙ্কনযোগ্য ডিরেক্টরিগুলির চিত্রগুলি নির্দিষ্ট স্ক্রিনের ঘনত্বের জন্য আকারযুক্ত, তবে ফাইলের নামগুলি ঠিক একই। এইভাবে, আপনি icon.png বা background.png ইমেজ রেফারেন্স করতে যে রিসোর্স আইডি ব্যবহার করেন তা সবসময় একই থাকে। Android প্রতিটি রিসোর্সের ভার্সন নির্বাচন করে যা বর্তমান ডিভাইসের সাথে সবচেয়ে ভালো মেলে ডিভাইস কনফিগারেশন তথ্যের সাথে রিসোর্স ডিরেক্টরি নামের কোয়ালিফায়ারের সাথে তুলনা করে।

সতর্কতা: একটি বিকল্প সংস্থান সংজ্ঞায়িত করার সময়, নিশ্চিত করুন যে আপনি একটি ডিফল্ট কনফিগারেশনে সংস্থানটিও সংজ্ঞায়িত করেছেন। অন্যথায়, ডিভাইসটি কনফিগারেশন পরিবর্তন করলে আপনার অ্যাপ রানটাইম ব্যতিক্রমের সম্মুখীন হতে পারে। উদাহরণ স্বরূপ, আপনি যদি শুধুমাত্র values-en values নয়, তবে ব্যবহারকারী যখন ডিফল্ট সিস্টেম ভাষা পরিবর্তন করে তখন আপনার অ্যাপটি একটি Resource Not Found ব্যতিক্রমের সম্মুখীন হতে পারে।

সারণী 2 অগ্রাধিকারের ক্রমে বৈধ কনফিগারেশন যোগ্যতা তালিকাভুক্ত করে। প্রতিটি কোয়ালিফায়ারকে ড্যাশ দিয়ে আলাদা করে আপনি একটি ডিরেক্টরির নামে একাধিক কোয়ালিফায়ার যোগ করতে পারেন। আপনি যদি একটি রিসোর্স ডিরেক্টরির জন্য একাধিক কোয়ালিফায়ার ব্যবহার করেন, তাহলে আপনাকে অবশ্যই সেগুলিকে টেবিলে তালিকাভুক্ত ক্রমে ডিরেক্টরির নামের সাথে যুক্ত করতে হবে৷

সারণি 2. কনফিগারেশন কোয়ালিফায়ার নাম।

কনফিগারেশন কোয়ালিফায়ার মান বর্ণনা
MCC এবং MNC উদাহরণ:
mcc310
mcc310-mnc004
mcc208-mnc00

মোবাইল কান্ট্রি কোড (MCC), ঐচ্ছিকভাবে ডিভাইসের সিম কার্ড থেকে মোবাইল নেটওয়ার্ক কোড (MNC) অনুসরণ করে। উদাহরণস্বরূপ, যে কোনো ক্যারিয়ারে mcc310 হল US, Verizon-এ mcc310-mnc004 হল US এবং Orange-এ mcc208-mnc00 হল ফ্রান্স।

যদি ডিভাইসটি একটি রেডিও সংযোগ ব্যবহার করে (অর্থাৎ এটি একটি GSM ফোন), MCC এবং MNC মানগুলি সিম কার্ড থেকে আসে৷

আপনি একা MCC ব্যবহার করতে পারেন, উদাহরণস্বরূপ, আপনার অ্যাপে দেশ-নির্দিষ্ট আইনি সংস্থান অন্তর্ভুক্ত করতে। আপনি যদি শুধুমাত্র ভাষার উপর ভিত্তি করে নির্দিষ্ট করতে চান, তাহলে পরিবর্তে ভাষা, স্ক্রিপ্ট (ঐচ্ছিক), এবং অঞ্চল (ঐচ্ছিক) কোয়ালিফায়ার ব্যবহার করুন। আপনি যদি MCC এবং MNC কোয়ালিফায়ার ব্যবহার করেন, তা যত্ন সহকারে করুন এবং পরীক্ষা করুন যে এটি প্রত্যাশা অনুযায়ী কাজ করে।

এছাড়াও কনফিগারেশন ক্ষেত্রগুলি দেখুন mcc , এবং mnc , যা যথাক্রমে বর্তমান মোবাইল দেশের কোড এবং মোবাইল নেটওয়ার্ক কোড নির্দেশ করে৷

ভাষা, স্ক্রিপ্ট (ঐচ্ছিক), এবং অঞ্চল (ঐচ্ছিক) উদাহরণ:
en
fr
en-rUS
fr-rFR
fr-rCA
b+en
b+en+US
b+es+419
b+zh+Hant
b+sr+Latn+RS

ভাষাটিকে একটি দুই-অক্ষরের ISO 639-1 ভাষা কোড দ্বারা সংজ্ঞায়িত করা হয়, ঐচ্ছিকভাবে একটি দুই-অক্ষরের ISO 3166-1-আলফা-2 অঞ্চল কোড (ছোট হাতের r দ্বারা পূর্বে) দ্বারা অনুসরণ করা হয়।

কোডগুলি কেস-সংবেদনশীল নয়r উপসর্গটি অঞ্চলের অংশকে আলাদা করতে ব্যবহৃত হয়। আপনি একা একটি অঞ্চল নির্দিষ্ট করতে পারবেন না।

Android 7.0 (API স্তর 24) BCP 47 ভাষা ট্যাগগুলির জন্য সমর্থন চালু করেছে, যা আপনি ভাষা- এবং অঞ্চল-নির্দিষ্ট সংস্থানগুলির যোগ্যতা অর্জন করতে ব্যবহার করতে পারেন৷ একটি ভাষা ট্যাগ এক বা একাধিক সাবট্যাগের একটি ক্রম থেকে গঠিত, যার প্রতিটি সামগ্রিক ট্যাগ দ্বারা চিহ্নিত ভাষার পরিসরকে পরিমার্জিত বা সংকুচিত করে। ভাষা ট্যাগ সম্পর্কে আরও তথ্যের জন্য, ভাষা সনাক্তকরণের জন্য ট্যাগ দেখুন।

একটি BCP 47 ভাষা ট্যাগ ব্যবহার করতে, b+ এবং একটি দুই-অক্ষরের ISO 639-1 ভাষা কোড সংযুক্ত করুন, ঐচ্ছিকভাবে + দ্বারা পৃথক করা অতিরিক্ত সাবট্যাগগুলি অনুসরণ করুন।

ব্যবহারকারীরা সিস্টেম সেটিংসে তাদের ভাষা পরিবর্তন করলে আপনার অ্যাপের জীবনের সময় ভাষা ট্যাগ পরিবর্তন হতে পারে। রানটাইম চলাকালীন এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করতে পারে সে সম্পর্কে তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন দেখুন।

অন্যান্য ভাষার জন্য আপনার অ্যাপ স্থানীয়করণের সম্পূর্ণ গাইডের জন্য, আপনার অ্যাপ স্থানীয়করণ দেখুন।

এছাড়াও getLocales() পদ্ধতি দেখুন, যা লোকেলের সংজ্ঞায়িত তালিকা প্রদান করে। এই তালিকায় প্রাথমিক লোকেল অন্তর্ভুক্ত রয়েছে।

লেআউট দিক ldrtl
ldltr

আপনার অ্যাপের লেআউট দিক। ldrtl মানে "লেআউট-দিক-দিক-ডান-থেকে-বামে।" ldltr মানে "লেআউট-নির্দেশ-বাম-থেকে-ডান" এবং এটি ডিফল্ট অন্তর্নিহিত মান।

এটি যেকোন সম্পদের ক্ষেত্রে প্রযোজ্য হতে পারে, যেমন লেআউট, অঙ্কনযোগ্য বা মান।

উদাহরণস্বরূপ, আপনি যদি আরবি ভাষার জন্য একটি নির্দিষ্ট লেআউট এবং ফার্সি বা হিব্রু মত অন্য কোনো "ডান-থেকে-বাম" ভাষার জন্য একটি সাধারণ বিন্যাস প্রদান করতে চান, তাহলে আপনি নিম্নলিখিতগুলির মতো ডিরেক্টরি ব্যবহার করুন:

res/
layout/
main.xml (ডিফল্ট লেআউট)
layout-ar/
main.xml (আরবি জন্য নির্দিষ্ট লেআউট)
layout-ldrtl/
main.xml (আরবি ব্যতীত যেকোন ডান থেকে বামে ভাষা, কারণ "আর" ভাষার যোগ্যতা উচ্চতর অগ্রাধিকার রয়েছে)

দ্রষ্টব্য: আপনার অ্যাপের জন্য ডান-থেকে-বাম লেআউট বৈশিষ্ট্যগুলি সক্ষম করতে, আপনাকে অবশ্যই SupportsRtl "true" তে সেট করতে হবে এবং TargetSdkVersion 17 বা তার বেশিতে সেট করতে হবে।

API স্তর 17 এ যোগ করা হয়েছে।

সবচেয়ে ছোট প্রস্থ sw<N>dp

উদাহরণ:
sw320dp
sw600dp
sw720dp
ইত্যাদি

একটি অ্যাপে উপলব্ধ স্ক্রীন এলাকার সংক্ষিপ্ত মাত্রা। বিশেষ করে, অ্যাপ উইন্ডোর smallestWidth হল উইন্ডোটির উপলব্ধ উচ্চতা এবং প্রস্থের মধ্যে সবচেয়ে ছোট। আপনি এটিকে উইন্ডোটির জন্য "সবচেয়ে ছোট সম্ভাব্য প্রস্থ" হিসাবেও ভাবতে পারেন। আপনি এই কোয়ালিফায়ারটি ব্যবহার করতে পারেন যাতে আপনার অ্যাপের UI এর জন্য কমপক্ষে <N> dps প্রস্থ থাকে।

উদাহরণস্বরূপ, যদি আপনার লেআউটের প্রয়োজন হয় যে তার স্ক্রীন এলাকার ক্ষুদ্রতম মাত্রা সর্বদা কমপক্ষে 600 ডিপি হতে হবে, তাহলে আপনি একটি res/layout-sw600dp/ ডিরেক্টরিতে লেআউট সংস্থান তৈরি করতে এই কোয়ালিফায়ারটি ব্যবহার করতে পারেন। সিস্টেমটি শুধুমাত্র তখনই এই সম্পদগুলি ব্যবহার করে যখন উপলব্ধ স্ক্রিনের ক্ষুদ্রতম মাত্রা কমপক্ষে 600 dp হয়, 600 dp দিকটি ব্যবহারকারীর দ্বারা অনুভূত উচ্চতা বা প্রস্থ যাই হোক না কেন। উইন্ডোটির আকার পরিবর্তন করা হলে, উপলব্ধ প্রস্থ/উচ্চতা পরিবর্তন করা হলে, বা পুনরায় অবস্থান করা হলে, সিস্টেম ইনসেটগুলিকে সম্ভাব্যভাবে পরিবর্তন করা হলে ক্ষুদ্রতম প্রস্থ পরিবর্তন হতে পারে।

সাধারণ স্ক্রীনের আকার নির্ধারণ করতে সবচেয়ে ছোট প্রস্থ ব্যবহার করা দরকারী কারণ প্রস্থ প্রায়শই একটি লেআউট ডিজাইনের ড্রাইভিং ফ্যাক্টর। একটি UI প্রায়শই উল্লম্বভাবে স্ক্রোল করে, তবে অনুভূমিকভাবে ন্যূনতম স্থানের প্রয়োজনে মোটামুটি কঠিন সীমাবদ্ধতা রয়েছে।

হ্যান্ডসেটের জন্য ওয়ান-পেন লেআউট বা ট্যাবলেটের জন্য মাল্টিপেন লেআউট ব্যবহার করা হবে কিনা তা নির্ধারণের জন্য উপলব্ধ প্রস্থও মূল বিষয়। সুতরাং, আপনি সম্ভবত প্রতিটি ডিভাইসে সবচেয়ে ছোট সম্ভাব্য প্রস্থের বিষয়ে সবচেয়ে বেশি যত্নশীল।

একটি ডিভাইসের ক্ষুদ্রতম প্রস্থ স্ক্রীন সজ্জা এবং সিস্টেম UI বিবেচনা করে। উদাহরণস্বরূপ, যদি ডিভাইসটির স্ক্রিনে স্থায়ী UI উপাদান থাকে যা ক্ষুদ্রতম প্রস্থের অক্ষ বরাবর স্থানের জন্য হিসাব করে, সিস্টেমটি ক্ষুদ্রতম প্রস্থটিকে প্রকৃত স্ক্রীনের আকারের চেয়ে ছোট বলে ঘোষণা করে, কারণ সেগুলি আপনার UI এর জন্য স্ক্রীন পিক্সেল উপলব্ধ নয়। .

সাধারণ পর্দার আকারের জন্য আপনি এখানে কিছু মান ব্যবহার করতে পারেন:

  • 320, স্ক্রিন কনফিগারেশন সহ ডিভাইসগুলির জন্য যেমন:
    • 240x320 ldpi (QVGA হ্যান্ডসেট)
    • 320x480 mdpi (হ্যান্ডসেট)
    • 480x800 hdpi (উচ্চ ঘনত্বের হ্যান্ডসেট)
  • 480, স্ক্রিনের জন্য যেমন 480x800 mdpi (ট্যাবলেট/হ্যান্ডসেট)
  • 600, স্ক্রিনের জন্য যেমন 600x1024 mdpi (7" ট্যাবলেট)
  • 720, স্ক্রিনের জন্য যেমন 720x1280 mdpi (10" ট্যাবলেট)

যখন আপনার অ্যাপ্লিকেশানটি smallestWidth কোয়ালিফায়ারের জন্য বিভিন্ন মান সহ একাধিক সংস্থান ডিরেক্টরি সরবরাহ করে, তখন সিস্টেমটি ডিভাইসের smallestWidth (অতিরিক্ত ছাড়া) নিকটতম একটি ব্যবহার করে৷

API স্তর 13 এ যোগ করা হয়েছে।

এছাড়াও android:requiresSmallestWidthDp অ্যাট্রিবিউটটি দেখুন, যা সর্বনিম্ন smallestWidth ঘোষণা করে যার সাথে আপনার অ্যাপটি সামঞ্জস্যপূর্ণ, এবং smallestScreenWidthDp কনফিগারেশন ক্ষেত্র, যা ডিভাইসের smallestWidth মান ধারণ করে।

এই কোয়ালিফায়ার ব্যবহার করে বিভিন্ন স্ক্রিনের জন্য ডিজাইন করার বিষয়ে আরও তথ্যের জন্য, দেখুন প্রতিক্রিয়াশীল/অভিযোজিত নকশা দেখুন

উপলব্ধ প্রস্থ এবং উচ্চতা w<N>dp
h<N>dp

উদাহরণ:
w720dp
w1024dp
h720dp
h1024dp
ইত্যাদি

ন্যূনতম উপলব্ধ স্ক্রিনের প্রস্থ বা উচ্চতা নির্দিষ্ট করে ( dp ইউনিটে <N> মান দ্বারা সংজ্ঞায়িত) যেখানে সম্পদ ব্যবহার করা হয়। এই কনফিগারেশন মানগুলি বর্তমান প্রদর্শনের প্রস্থ এবং উচ্চতার সাথে তুলনা করা হয় কারণ প্রতিকৃতি এবং ল্যান্ডস্কেপের মধ্যে ডিভাইসের অভিযোজন পরিবর্তিত হয়, ডিভাইসটি ভাঁজ বা উন্মোচিত হয়, বা সিস্টেম মাল্টি-উইন্ডো মোডে প্রবেশ করে বা প্রস্থান করে। মাল্টি-উইন্ডো মোডে, মানগুলি যে উইন্ডোটির প্রস্থ এবং উচ্চতাকে প্রতিফলিত করে যেটিতে অ্যাপ রয়েছে, ডিভাইসের স্ক্রিনের প্রস্থ এবং উচ্চতা নয়। একইভাবে, এম্বেড করা ক্রিয়াকলাপের জন্য, মানগুলি পৃথক কার্যকলাপের প্রস্থ এবং উচ্চতার সাথে সম্পর্কিত, পর্দার প্রস্থ এবং উচ্চতা নয়। আরও তথ্যের জন্য, অ্যাক্টিভিটি এম্বেডিং দেখুন।

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

যখন আপনার অ্যাপ এই কনফিগারেশনের জন্য বিভিন্ন মান সহ একাধিক রিসোর্স ডিরেক্টরি প্রদান করে, তখন সিস্টেমটি ডিভাইসের বর্তমান স্ক্রীন প্রস্থের (অতিরিক্ত ছাড়া) সবচেয়ে কাছের একটি ব্যবহার করে। 0 এর মান সহ অনির্দিষ্ট উচ্চতা এবং প্রস্থের প্রকৃত পর্দার উচ্চতা এবং নির্দিষ্ট উচ্চতার মধ্যে পার্থক্যের সাথে প্রকৃত স্ক্রীনের প্রস্থ এবং নির্দিষ্ট প্রস্থের পার্থক্য যোগ করে এর নিকটতম নির্ধারণ করা হয়।

মানগুলি উইন্ডো ইনসেট দ্বারা দখলকৃত এলাকা বাদ দেয়, তাই যদি ডিভাইসটির ডিসপ্লের প্রান্তে অবিচ্ছিন্ন UI উপাদান থাকে, তাহলে প্রস্থ এবং উচ্চতার মান বাস্তব স্ক্রীনের মাত্রার চেয়ে ছোট হয়, এমনকি যখন অ্যাপটি Window.setDecorFitsSystemWindows ব্যবহার করে প্রান্ত থেকে প্রান্তে প্রদর্শিত হয় Window.setDecorFitsSystemWindows বা WindowCompat.setDecorFitsSystemWindows

কিছু উল্লম্ব স্ক্রিনের সাজসজ্জা যা স্থির নয় (যেমন একটি ফোন স্ট্যাটাস বার যা পূর্ণ স্ক্রীনে লুকিয়ে রাখা যায়) এখানে হিসাব করা হয় না , বা শিরোনাম বার বা অ্যাকশন বারের মতো উইন্ডো সজ্জাও নেই, তাই অ্যাপগুলিকে মোকাবেলা করার জন্য প্রস্তুত থাকতে হবে তারা নির্দিষ্ট করার চেয়ে কিছুটা ছোট স্থান।

দ্রষ্টব্য: সিস্টেমটি প্রস্থ এবং উচ্চতা উভয় ক্ষেত্রেই মেলে এমন সংস্থান বেছে নেয়। তাই একটি সংস্থান যা উভয়কে নির্দিষ্ট করে একটির চেয়ে দৃঢ়ভাবে পছন্দ করা হয় যা শুধুমাত্র একটি বা অন্যটিকে নির্দিষ্ট করে। উদাহরণস্বরূপ, যদি প্রকৃত স্ক্রিনটি 720 dp চওড়া 1280 dp উচ্চ হয় এবং একটি সংস্থান w720dp এর সাথে যোগ্য হয় এবং অন্যটি w700dp-h1200dp হিসাবে যোগ্য হয়, তবে পরবর্তীটি বেছে নেওয়া হয় যদিও পূর্ববর্তীটি এটি যা নির্দিষ্ট করে তার সাথে সঠিক মিল।

API স্তর 13 এ যোগ করা হয়েছে।

এছাড়াও screenWidthDp এবং screenHeightDp কনফিগারেশন ক্ষেত্রগুলি দেখুন, যা বর্তমান স্ক্রীনের প্রস্থ এবং উচ্চতা ধরে রাখে।

এই কোয়ালিফায়ার ব্যবহার করে বিভিন্ন স্ক্রিনের জন্য ডিজাইন করার বিষয়ে আরও তথ্যের জন্য, দেখুন প্রতিক্রিয়াশীল/অভিযোজিত নকশা দেখুন

পর্দার আকার small
normal
large
xlarge
  • small : কম ঘনত্বের QVGA স্ক্রিনের মতো আকারের স্ক্রিন। একটি ছোট পর্দার জন্য সর্বনিম্ন লেআউট আকার প্রায় 320x426 dp ইউনিট। উদাহরণ হল QVGA কম ঘনত্ব এবং VGA উচ্চ ঘনত্ব।
  • normal : মাঝারি-ঘনত্বের HVGA স্ক্রিনের মতো মাপের পর্দা। একটি সাধারণ স্ক্রিনের জন্য সর্বনিম্ন লেআউট আকার প্রায় 320x470 dp ইউনিট। এই ধরনের পর্দার উদাহরণ হল একটি WQVGA কম ঘনত্ব, HVGA মাঝারি ঘনত্ব এবং WVGA উচ্চ ঘনত্ব।
  • large : মাঝারি-ঘনত্বের VGA স্ক্রিনের মতো মাপের স্ক্রিন। একটি বড় পর্দার জন্য ন্যূনতম বিন্যাস আকার প্রায় 480x640 dp ইউনিট। উদাহরণ হল VGA এবং WVGA মাঝারি-ঘনত্বের পর্দা।
  • xlarge : প্রথাগত মাঝারি-ঘনত্বের HVGA স্ক্রীনের তুলনায় যথেষ্ট বড় স্ক্রীন। একটি x বৃহৎ স্ক্রীনের জন্য সর্বনিম্ন বিন্যাসের আকার প্রায় 720x960 dp ইউনিট। বেশিরভাগ ক্ষেত্রে, অতিরিক্ত-বড় স্ক্রিনযুক্ত ডিভাইসগুলি পকেটে বহন করার জন্য খুব বড় এবং সম্ভবত ট্যাবলেট-স্টাইলের ডিভাইস। API স্তর 9 এ যোগ করা হয়েছে।

দ্রষ্টব্য: একটি মাপ কোয়ালিফায়ার ব্যবহার করা বোঝায় না যে সংস্থানগুলি শুধুমাত্র সেই আকারের পর্দার জন্য। আপনি যদি বর্তমান ডিভাইস কনফিগারেশনের সাথে ভালোভাবে মেলে এমন কোয়ালিফায়ারগুলির সাথে বিকল্প সংস্থানগুলি প্রদান না করেন, তাহলে সিস্টেমটি সর্বোত্তম মেলে যে কোনও সংস্থান ব্যবহার করতে পারে৷

সতর্কতা: যদি আপনার সমস্ত সংস্থান বর্তমান স্ক্রিনের থেকে বড় আকারের কোয়ালিফায়ার ব্যবহার করে, তবে সিস্টেম সেগুলি ব্যবহার করে না এবং রানটাইমে আপনার অ্যাপ ক্র্যাশ হয়ে যায়। এটি ঘটে, উদাহরণস্বরূপ, যদি সমস্ত লেআউট সংস্থান xlarge কোয়ালিফায়ারের সাথে ট্যাগ করা থাকে তবে ডিভাইসটিতে একটি সাধারণ-আকারের স্ক্রীন থাকে।

API স্তর 4 এ যোগ করা হয়েছে।

এছাড়াও screenLayout কনফিগারেশন ক্ষেত্রটি দেখুন, যা নির্দেশ করে যে স্ক্রীনটি ছোট, স্বাভাবিক বা বড় কিনা।

আরও তথ্যের জন্য, স্ক্রীন সামঞ্জস্য ওভারভিউ দেখুন।

পর্দার দিক long
notlong
  • long : লম্বা পর্দা, যেমন WQVGA, WVGA, FWVGA
  • notlong : দীর্ঘ স্ক্রীন নয়, যেমন QVGA, HVGA, এবং VGA

API স্তর 4 এ যোগ করা হয়েছে।

এটি সম্পূর্ণরূপে স্ক্রিনের আকৃতির অনুপাতের উপর ভিত্তি করে (একটি long স্ক্রীন প্রশস্ত)। এটি পর্দার অভিযোজনের সাথে সম্পর্কিত নয়।

এছাড়াও screenLayout কনফিগারেশন ক্ষেত্রটি দেখুন, যা নির্দেশ করে যে স্ক্রীনটি দীর্ঘ কিনা।

গোলাকার পর্দা round
notround
  • round : গোলাকার পর্দা, যেমন একটি বৃত্তাকার পরিধানযোগ্য ডিভাইস
  • notround : আয়তক্ষেত্রাকার পর্দা, যেমন ফোন বা ট্যাবলেট

API স্তর 23 এ যোগ করা হয়েছে।

এছাড়াও isScreenRound() কনফিগারেশন পদ্ধতি দেখুন, যা নির্দেশ করে যে স্ক্রীনটি গোলাকার কিনা।

ওয়াইড কালার গামুট widecg
nowidecg
  • widecg : ডিসপ্লে P3 বা AdobeRGB এর মতো প্রশস্ত রঙের স্বরগ্রাম সহ প্রদর্শন
  • nowidecg : একটি সংকীর্ণ রঙের স্বরলিপি যেমন sRGB সহ প্রদর্শন করে

API স্তর 26 এ যোগ করা হয়েছে।

এছাড়াও isScreenWideColorGamut() কনফিগারেশন পদ্ধতি দেখুন, যা নির্দেশ করে যে পর্দায় একটি প্রশস্ত রঙের স্বরগ্রাম আছে কিনা।

হাই ডায়নামিক রেঞ্জ (HDR) highdr
lowdr
  • highdr : একটি উচ্চ গতিশীল পরিসীমা সহ প্রদর্শন করে
  • lowdr : একটি নিম্ন/মানগত গতিশীল পরিসরের সাথে প্রদর্শন করে

API স্তর 26 এ যোগ করা হয়েছে।

এছাড়াও isScreenHdr() কনফিগারেশন পদ্ধতি দেখুন, যা নির্দেশ করে যে স্ক্রিনে HDR ক্ষমতা আছে কিনা।

স্ক্রীন অভিযোজন port
land
  • port : ডিভাইসটি পোর্ট্রেট অভিযোজনে রয়েছে (উল্লম্ব)
  • land : ডিভাইসটি ল্যান্ডস্কেপ ওরিয়েন্টেশনে (অনুভূমিক)

ব্যবহারকারী যদি স্ক্রিন ঘোরায় তবে এটি আপনার অ্যাপের জীবনের সময় পরিবর্তিত হতে পারে। রানটাইম চলাকালীন এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করে সে সম্পর্কে তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন দেখুন।

এছাড়াও orientation কনফিগারেশন ক্ষেত্রটি দেখুন, যা বর্তমান ডিভাইসের অভিযোজন নির্দেশ করে।

UI মোড car
desk
television
appliance
watch
vrheadset
  • car : ডিভাইস একটি গাড়ী ডক প্রদর্শিত হয়
  • desk : ডিভাইসটি একটি ডেস্ক ডকে প্রদর্শিত হচ্ছে
  • television : ডিভাইসটি একটি টেলিভিশনে প্রদর্শিত হচ্ছে, একটি "দশ-ফুট" অভিজ্ঞতা প্রদান করছে যেখানে এর UI একটি বড় স্ক্রিনে রয়েছে যা ব্যবহারকারী অনেক দূরে, এবং অভিজ্ঞতাটি প্রাথমিকভাবে ডি-প্যাড বা অন্যান্য নন-পয়েন্টার মিথস্ক্রিয়াকে কেন্দ্র করে
  • appliance : ডিভাইসটি একটি যন্ত্র হিসাবে পরিবেশন করছে, কোন প্রদর্শন ছাড়াই
  • watch : ডিভাইসটিতে একটি ডিসপ্লে রয়েছে এবং এটি কব্জিতে পরা হয়
  • vrheadset : ডিভাইসটি একটি ভার্চুয়াল রিয়েলিটি হেডসেটে প্রদর্শিত হচ্ছে

API লেভেল 8 এ যোগ করা হয়েছে; API 13-এ টেলিভিশন যুক্ত করা হয়েছে; API 20 এ ঘড়ি যোগ করা হয়েছে।

একটি ডকের মধ্যে ডিভাইস ঢোকানো বা সরানো হলে আপনার অ্যাপ কীভাবে প্রতিক্রিয়া জানাতে পারে সে সম্পর্কে তথ্যের জন্য, ডকিং অবস্থা নির্ধারণ এবং নিরীক্ষণ পড়ুন এবং টাইপ করুন

ব্যবহারকারী ডিভাইসটিকে একটি ডকে রাখলে এটি আপনার অ্যাপের জীবনের সময় পরিবর্তিত হতে পারে। আপনি UiModeManager ব্যবহার করে এই কয়েকটি মোড সক্ষম বা নিষ্ক্রিয় করতে পারেন। রানটাইম চলাকালীন এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করে সে সম্পর্কে তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন দেখুন।

রাত মোড night
notnight
  • night : রাতের সময়
  • notnight : দিনের সময়

API স্তর 8 এ যোগ করা হয়েছে।

নাইট মোড অটো মোডে (ডিফল্ট) রেখে দিলে আপনার অ্যাপের জীবনের সময় এটি পরিবর্তন হতে পারে, সেক্ষেত্রে দিনের সময়ের উপর ভিত্তি করে মোড পরিবর্তিত হয়। আপনি UiModeManager ব্যবহার করে এই মোড সক্ষম বা নিষ্ক্রিয় করতে পারেন। রানটাইম চলাকালীন এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করে সে সম্পর্কে তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন দেখুন।

স্ক্রীন পিক্সেল ঘনত্ব (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnn dpi
  • ldpi : কম ঘনত্বের পর্দা; প্রায় 120 ডিপিআই।
  • mdpi : মাঝারি-ঘনত্ব (প্রথাগত HVGA-তে) স্ক্রীন; প্রায় 160 ডিপিআই।
  • hdpi : উচ্চ-ঘনত্বের পর্দা; প্রায় 240 ডিপিআই।
  • xhdpi : অতিরিক্ত উচ্চ ঘনত্বের পর্দা; প্রায় 320 ডিপিআই। API স্তর 8 এ যোগ করা হয়েছে।
  • xxhdpi : অতিরিক্ত-অতিরিক্ত-উচ্চ ঘনত্বের পর্দা; প্রায় 480 ডিপিআই। API স্তর 16 এ যোগ করা হয়েছে।
  • xxxhdpi : অতিরিক্ত-অতিরিক্ত-অতিরিক্ত-উচ্চ ঘনত্বের ব্যবহার (শুধুমাত্র লঞ্চার আইকন-দেখুন বিভিন্ন পিক্সেল ঘনত্ব সমর্থন করে ); প্রায় 640 ডিপিআই। API স্তর 18 এ যোগ করা হয়েছে।
  • nodpi : বিটম্যাপ সংস্থানগুলির জন্য ব্যবহৃত হয় যা আপনি ডিভাইসের ঘনত্বের সাথে মেলে স্কেল করতে চান না।
  • tvdpi : mdpi এবং hdpi এর মধ্যে কোথাও স্ক্রীন; প্রায় 213 ডিপিআই। এটি একটি "প্রাথমিক" ঘনত্ব গ্রুপ হিসাবে বিবেচিত হয় না। এটি বেশিরভাগই 720p টেলিভিশনের জন্য তৈরি, এবং বেশিরভাগ অ্যাপের এটির প্রয়োজন নেই। 1080p টিভি প্যানেলের জন্য, xhdpi ব্যবহার করুন এবং 4K টিভি প্যানেলের জন্য, xxxhdpi ব্যবহার করুন। API স্তর 13 এ যোগ করা হয়েছে।
  • anydpi : সমস্ত স্ক্রিনের ঘনত্বের সাথে মেলে এবং অন্যান্য কোয়ালিফায়ারদের থেকে অগ্রাধিকার পায়। এটি ভেক্টর অঙ্কনযোগ্য জন্য দরকারী। API স্তর 21 এ যোগ করা হয়েছে।
  • nnn dpi : অ-মানক ঘনত্বের প্রতিনিধিত্ব করতে ব্যবহৃত হয়, যেখানে nnn হল একটি ধনাত্মক পূর্ণসংখ্যা পর্দার ঘনত্ব। এটি বেশিরভাগ ক্ষেত্রে ব্যবহার করা হয় না। স্ট্যান্ডার্ড ঘনত্বের বালতি ব্যবহার করা বাজারে বিভিন্ন ডিভাইসের পর্দার ঘনত্বকে সমর্থন করার ওভারহেডকে ব্যাপকভাবে হ্রাস করে।

ছয়টি প্রাথমিক ঘনত্বের মধ্যে একটি 3:4:6:8:12:16 স্কেলিং অনুপাত রয়েছে (tvdpi ঘনত্ব উপেক্ষা করে)। সুতরাং, ldpi-এ একটি 9x9 বিটম্যাপ হল mdpi-এ 12x12, hdpi-এ 18x18, xhdpi-এ 24x24, ইত্যাদি।

দ্রষ্টব্য: একটি ঘনত্ব কোয়ালিফায়ার ব্যবহার করা বোঝায় না যে সংস্থানগুলি শুধুমাত্র সেই ঘনত্বের পর্দার জন্য। আপনি যদি বর্তমান ডিভাইস কনফিগারেশনের সাথে আরও ভালোভাবে মেলে এমন কোয়ালিফায়ারগুলির সাথে বিকল্প সংস্থান প্রদান না করেন, তাহলে সিস্টেমটি সর্বোত্তম মেলে যেটি সম্পদ ব্যবহার করে৷

বিভিন্ন স্ক্রীনের ঘনত্ব কীভাবে পরিচালনা করবেন এবং বর্তমান ঘনত্বের সাথে মানানসই করার জন্য Android কীভাবে আপনার বিটম্যাপগুলিকে স্কেল করতে পারে সে সম্পর্কে আরও তথ্যের জন্য, স্ক্রীন সামঞ্জস্যের ওভারভিউ দেখুন।

টাচস্ক্রিন প্রকার notouch
finger
  • notouch : ডিভাইসে টাচস্ক্রিন নেই।
  • finger : ডিভাইসটিতে একটি টাচস্ক্রিন রয়েছে যা ব্যবহারকারীর আঙুলের দিকনির্দেশনা মিথস্ক্রিয়া দ্বারা ব্যবহার করার উদ্দেশ্যে।

এছাড়াও touchscreen কনফিগারেশন ক্ষেত্রটি দেখুন, যা ডিভাইসে টাচস্ক্রীনের ধরন নির্দেশ করে।

কীবোর্ড প্রাপ্যতা keysexposed
keyshidden
keyssoft
  • keysexposed : ডিভাইসে একটি কীবোর্ড উপলব্ধ আছে। যদি ডিভাইসটিতে একটি সফ্টওয়্যার কীবোর্ড সক্রিয় থাকে (যা সম্ভবত), তখনও এটি ব্যবহার করা হয় যখন হার্ডওয়্যার কীবোর্ড ব্যবহারকারীর কাছে প্রকাশ না হয় বা যখন ডিভাইসে কোনও হার্ডওয়্যার কীবোর্ড না থাকে। যদি কোনও সফ্টওয়্যার কীবোর্ড দেওয়া না থাকে বা এটি অক্ষম করা থাকে, তবে এটি শুধুমাত্র তখনই ব্যবহৃত হয় যখন একটি হার্ডওয়্যার কীবোর্ড উন্মুক্ত হয়৷
  • keyshidden : ডিভাইসটিতে একটি হার্ডওয়্যার কীবোর্ড উপলব্ধ আছে কিন্তু এটি লুকানো আছে এবং ডিভাইসটিতে একটি সফ্টওয়্যার কীবোর্ড সক্রিয় নেই
  • keyssoft : ডিভাইসটিতে একটি সফ্টওয়্যার কীবোর্ড সক্রিয় আছে, তা দৃশ্যমান হোক বা না হোক।

আপনি যদি keysexposed রিসোর্স প্রদান করেন, কিন্তু keyssoft রিসোর্স না দেন, তাহলে সিস্টেমে একটি সফ্টওয়্যার কীবোর্ড সক্রিয় থাকা পর্যন্ত কীবোর্ড দৃশ্যমান হোক না কেন, সিস্টেম keysexposed সংস্থানগুলি ব্যবহার করে।

ব্যবহারকারী যদি একটি হার্ডওয়্যার কীবোর্ড খোলে তবে এটি আপনার অ্যাপের জীবনের সময় পরিবর্তিত হতে পারে। রানটাইম চলাকালীন এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করে সে সম্পর্কে তথ্যের জন্য, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন দেখুন।

এছাড়াও কনফিগারেশন ক্ষেত্রগুলি দেখুন hardKeyboardHidden এবং keyboardHidden , যা যথাক্রমে একটি হার্ডওয়্যার কীবোর্ডের দৃশ্যমানতা এবং যেকোনো ধরনের কীবোর্ডের দৃশ্যমানতা নির্দেশ করে (সফ্টওয়্যার সহ)।

প্রাথমিক পাঠ্য ইনপুট পদ্ধতি nokeys
qwerty
12key
  • nokeys : টেক্সট ইনপুটের জন্য ডিভাইসে কোন হার্ডওয়্যার কী নেই।
  • qwerty : ডিভাইসটিতে একটি হার্ডওয়্যার QWERTY কীবোর্ড রয়েছে, তা ব্যবহারকারীর কাছে দৃশ্যমান হোক বা না হোক।
  • 12key : ডিভাইসটিতে একটি হার্ডওয়্যার 12-কী কীবোর্ড রয়েছে, তা ব্যবহারকারীর কাছে দৃশ্যমান হোক বা না হোক।

এছাড়াও keyboard কনফিগারেশন ক্ষেত্রটি দেখুন, যা উপলব্ধ প্রাথমিক পাঠ্য ইনপুট পদ্ধতি নির্দেশ করে।

প্ল্যাটফর্ম সংস্করণ (API স্তর) উদাহরণ:
v3
v4
v7
ইত্যাদি

ডিভাইস দ্বারা সমর্থিত API স্তর। উদাহরণস্বরূপ, API স্তর 1 এর জন্য v1 (Android 1.0 বা উচ্চতর ডিভাইস) এবং API স্তর 4 এর জন্য v4 (Android 1.6 বা উচ্চতর ডিভাইস)। এই মানগুলি সম্পর্কে আরও তথ্যের জন্য, Android API স্তরের নথি দেখুন৷

দ্রষ্টব্য: অ্যান্ড্রয়েডের সব সংস্করণ সব কোয়ালিফায়ার সমর্থন করে না। একটি নতুন কোয়ালিফায়ার ব্যবহার করে প্ল্যাটফর্ম সংস্করণ কোয়ালিফায়ারকে অস্পষ্টভাবে যুক্ত করে যাতে পুরানো ডিভাইসগুলি এটি উপেক্ষা করতে পারে। উদাহরণস্বরূপ, একটি w600dp কোয়ালিফায়ার ব্যবহার করলে স্বয়ংক্রিয়ভাবে v13 কোয়ালিফায়ার অন্তর্ভুক্ত হয়, কারণ উপলব্ধ-প্রস্থ কোয়ালিফায়ার API স্তর 13-এ নতুন ছিল। যেকোনো সমস্যা এড়াতে, সর্বদা ডিফল্ট সংস্থানগুলির একটি সেট অন্তর্ভুক্ত করুন ( কোনও যোগ্যতা নেই এমন সংস্থানগুলির একটি সেট)। আরও তথ্যের জন্য, সংস্থানগুলির সাথে সর্বোত্তম ডিভাইসের সামঞ্জস্য প্রদান সম্পর্কে বিভাগটি দেখুন৷

কোয়ালিফায়ার নামের নিয়ম

এখানে কনফিগারেশন কোয়ালিফায়ার নাম ব্যবহার সম্পর্কে কিছু নিয়ম আছে:

  • আপনি ড্যাশ দ্বারা পৃথক করা সম্পদের একক সেটের জন্য একাধিক যোগ্যতা নির্দিষ্ট করতে পারেন। উদাহরণ স্বরূপ, ল্যান্ডস্কেপ ওরিয়েন্টেশনে US-ইংরেজি ডিভাইসের ক্ষেত্রে drawable-en-rUS-land প্রযোজ্য।
  • যোগ্যতা সারণী 2 এ তালিকাভুক্ত ক্রমানুসারে হতে হবে।
    • ভুল: drawable-hdpi-port/
    • সঠিক: drawable-port-hdpi/
  • বিকল্প সম্পদ ডিরেক্টরি নেস্ট করা যাবে না। উদাহরণস্বরূপ, আপনার কাছে res/drawable/drawable-en/ থাকতে পারে না।
  • মানগুলি কেস-সংবেদনশীল। কেস-সংবেদনশীল ফাইল সিস্টেমে সমস্যা এড়াতে রিসোর্স কম্পাইলার প্রক্রিয়াকরণের আগে ডিরেক্টরির নামগুলিকে ছোট হাতের অক্ষরে রূপান্তর করে। নামের কোনো ক্যাপিটালাইজেশন শুধুমাত্র পঠনযোগ্যতা সুবিধার জন্য.
  • প্রতিটি কোয়ালিফায়ার টাইপের জন্য শুধুমাত্র একটি মান সমর্থিত। উদাহরণস্বরূপ, যদি আপনি স্পেন এবং ফ্রান্সের জন্য একই অঙ্কনযোগ্য ফাইলগুলি ব্যবহার করতে চান তবে আপনার কাছে drawable-es-fr/ নামে একটি ডিরেক্টরি থাকতে পারে না । পরিবর্তে, আপনার দুটি রিসোর্স ডিরেক্টরি প্রয়োজন, যেমন drawable-es/ এবং drawable-fr/ , যাতে উপযুক্ত ফাইল থাকে। যাইহোক, আপনাকে আসলে উভয় অবস্থানে ফাইলগুলি নকল করতে হবে না। পরিবর্তে, আপনি একটি সম্পদের একটি উপনাম তৈরি করতে পারেন, যেমন উপনাম সম্পদ তৈরি করুন বিভাগে বর্ণিত হয়েছে।

আপনি এই কোয়ালিফায়ারগুলির সাথে নামযুক্ত ডিরেক্টরিগুলিতে বিকল্প সংস্থানগুলি সংরক্ষণ করার পরে, বর্তমান ডিভাইস কনফিগারেশনের উপর ভিত্তি করে Android স্বয়ংক্রিয়ভাবে আপনার অ্যাপে সংস্থানগুলি প্রয়োগ করে৷ প্রতিবার একটি রিসোর্স অনুরোধ করা হলে, Android বিকল্প রিসোর্স ডিরেক্টরিগুলির জন্য চেক করে যাতে অনুরোধ করা রিসোর্স ফাইল থাকে, তারপর সেরা-মেলা রিসোর্স খুঁজে পায়

যদি কোনও নির্দিষ্ট ডিভাইস কনফিগারেশনের সাথে মেলে এমন কোনও বিকল্প সংস্থান না থাকে, তবে Android সংশ্লিষ্ট ডিফল্ট সংস্থানগুলি ব্যবহার করে—একটি নির্দিষ্ট সংস্থান প্রকারের জন্য সংস্থানগুলির সেট যা কনফিগারেশন যোগ্যতা অন্তর্ভুক্ত করে না।

উপনাম সম্পদ তৈরি করুন

যখন আপনার কাছে এমন একটি সংস্থান থাকে যা আপনি একাধিক ডিভাইস কনফিগারেশনের জন্য ব্যবহার করতে চান কিন্তু আপনি এটি একটি ডিফল্ট সংস্থান হিসাবে সরবরাহ করতে চান না, তখন আপনাকে একই সংস্থান একাধিক বিকল্প সংস্থান ডিরেক্টরিতে রাখতে হবে না৷ পরিবর্তে, আপনি একটি বিকল্প রিসোর্স তৈরি করতে পারেন যা আপনার ডিফল্ট রিসোর্স ডিরেক্টরিতে সংরক্ষিত রিসোর্সের উপনাম হিসেবে কাজ করে।

দ্রষ্টব্য: সমস্ত সংস্থান এমন একটি পদ্ধতি অফার করে না যার মাধ্যমে আপনি অন্য সংস্থানের একটি উপনাম তৈরি করতে পারেন। বিশেষ করে, xml/ ডিরেক্টরিতে অ্যানিমেশন, মেনু, কাঁচা এবং অন্যান্য অনির্দিষ্ট সংস্থানগুলি এই বৈশিষ্ট্যটি অফার করে না।

উদাহরণস্বরূপ, কল্পনা করুন আপনার কাছে একটি অ্যাপ আইকন রয়েছে, icon.png এবং বিভিন্ন লোকেলের জন্য এটির একটি অনন্য সংস্করণ প্রয়োজন৷ যাইহোক, দুটি লোকেল, ইংরেজি-কানাডিয়ান এবং ফ্রেঞ্চ-কানাডিয়ান, একই সংস্করণ ব্যবহার করতে হবে। আপনাকে ইংরেজি-কানাডিয়ান এবং ফ্রেঞ্চ-কানাডিয়ান উভয়ের জন্য রিসোর্স ডিরেক্টরিতে একই চিত্র অনুলিপি করতে হবে না। পরিবর্তে, আপনি icon.png ছাড়া অন্য যেকোন নাম ব্যবহার করে উভয়ের জন্য ব্যবহৃত ইমেজটি সংরক্ষণ করতে পারেন, যেমন icon_ca.png , এবং এটিকে ডিফল্ট res/drawable/ ডিরেক্টরিতে রাখতে পারেন। তারপর res/drawable-en-rCA/ এবং res/drawable-fr-rCA/ এ একটি icon.xml ফাইল তৈরি করুন যা <bitmap> উপাদান ব্যবহার করে icon_ca.png রিসোর্সকে নির্দেশ করে। এটি আপনাকে PNG ফাইলের মাত্র একটি সংস্করণ এবং দুটি ছোট XML ফাইল সংরক্ষণ করতে দেয় যা এটি নির্দেশ করে। বিস্তারিত জানার জন্য নিম্নলিখিত বিভাগে উদাহরণ দেখুন.

অঙ্কনযোগ্য

একটি বিদ্যমান অঙ্কনযোগ্য একটি উপনাম তৈরি করতে, <drawable> উপাদানটি ব্যবহার করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

আপনি যদি এই ফাইলটিকে একটি বিকল্প রিসোর্স ডিরেক্টরিতে icon.xml হিসাবে সংরক্ষণ করেন, যেমন res/values-en-rCA/ , এটি একটি রিসোর্সে সংকলিত হয় যা আপনি R.drawable.icon হিসাবে উল্লেখ করতে পারেন, কিন্তু আসলে এটির জন্য একটি উপনাম R.drawable.icon_ca রিসোর্স, যা res/drawable/ এ সংরক্ষিত হয়।

লেআউট

একটি বিদ্যমান লেআউটের একটি উপনাম তৈরি করতে, একটি <merge> এ মোড়ানো <include> উপাদানটি ব্যবহার করুন:

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

আপনি যদি এই ফাইলটিকে main.xml হিসাবে সংরক্ষণ করেন, তাহলে এটি একটি সংস্থানে সংকলিত হয় যা আপনি R.layout.main হিসাবে উল্লেখ করতে পারেন, কিন্তু আসলে এটি R.layout.main_ltr সংস্থানের একটি উপনাম।

স্ট্রিং এবং অন্যান্য সাধারণ মান

একটি বিদ্যমান স্ট্রিংয়ের একটি উপনাম তৈরি করতে, নতুন স্ট্রিংয়ের মান হিসাবে পছন্দসই স্ট্রিংয়ের রিসোর্স আইডি ব্যবহার করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

R.string.hi রিসোর্স এখন R.string.hello এর একটি উপনাম।

অন্যান্য সাধারণ মান একইভাবে কাজ করে, যেমন রং:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#f00</color>
    <color name="highlight">@color/red</color>
</resources>

আপনার অ্যাপ সম্পদ অ্যাক্সেস করুন

একবার আপনি আপনার অ্যাপ্লিকেশনে একটি সংস্থান প্রদান করলে, আপনি এটির সংস্থান আইডি উল্লেখ করে এটি প্রয়োগ করতে পারেন। সমস্ত রিসোর্স আইডি আপনার প্রোজেক্টের R ক্লাসে সংজ্ঞায়িত করা হয়েছে, যা aapt টুল স্বয়ংক্রিয়ভাবে তৈরি করে।

আপনার অ্যাপ্লিকেশন কম্পাইল করা হলে, aapt R ক্লাস তৈরি করে, যেটিতে আপনার res/ ডিরেক্টরির সমস্ত সংস্থানের জন্য রিসোর্স আইডি রয়েছে। প্রতিটি ধরনের রিসোর্সের জন্য একটি R সাবক্লাস আছে, যেমন R.drawable সমস্ত অঙ্কনযোগ্য সম্পদের জন্য। এবং এই ধরণের প্রতিটি সংস্থানের জন্য, একটি স্ট্যাটিক পূর্ণসংখ্যা রয়েছে, উদাহরণস্বরূপ, R.drawable.icon । এই পূর্ণসংখ্যা হল রিসোর্স আইডি যা আপনি আপনার রিসোর্স পুনরুদ্ধার করতে ব্যবহার করতে পারেন।

যদিও R ক্লাস হল যেখানে রিসোর্স আইডি নির্দিষ্ট করা আছে, আপনাকে রিসোর্স আইডি আবিষ্কার করতে সেখানে দেখার দরকার নেই। একটি রিসোর্স আইডি সর্বদা নিম্নলিখিতগুলি দ্বারা গঠিত হয়:

  • রিসোর্স টাইপ : প্রতিটি রিসোর্সকে একটি "টাইপ"-এ গোষ্ঠীভুক্ত করা হয়, যেমন string , drawable এবং layout । বিভিন্ন ধরনের সম্পর্কে আরও তথ্যের জন্য, সম্পদের প্রকার ওভারভিউ দেখুন।
  • রিসোর্স নাম , যা হয় এক্সটেনশন বাদ দিয়ে ফাইলের নাম অথবা XML android:name অ্যাট্রিবিউটের মান, যদি রিসোর্সটি একটি সাধারণ মান হয়, যেমন একটি স্ট্রিং।

আপনি একটি সম্পদ অ্যাক্সেস করতে পারেন দুটি উপায় আছে:

  • কোডে: আপনার R ক্লাসের একটি সাবক্লাস থেকে একটি স্ট্যাটিক পূর্ণসংখ্যা ব্যবহার করে, যেমন:
    R.string.hello

    string হল রিসোর্স টাইপ এবং hello হল রিসোর্সের নাম। অনেক Android API আছে যেগুলো আপনার রিসোর্স অ্যাক্সেস করতে পারে যখন আপনি এই ফর্ম্যাটে রিসোর্স আইডি প্রদান করেন। আরও তথ্যের জন্য, কোড বিভাগে অ্যাক্সেস রিসোর্স দেখুন।

  • XML-এ: একটি বিশেষ XML সিনট্যাক্স ব্যবহার করে যা আপনার R ক্লাসে সংজ্ঞায়িত রিসোর্স আইডির সাথে মিলে যায়, যেমন:
    @string/hello

    string হল রিসোর্স টাইপ এবং hello হল রিসোর্সের নাম। আপনি XML রিসোর্সে এই সিনট্যাক্সটি ব্যবহার করতে পারেন যেকোন জায়গায় যেখানে আপনি একটি রিসোর্সে প্রদান করেন এমন একটি মান প্রত্যাশিত। আরও তথ্যের জন্য, এক্সএমএল বিভাগ থেকে অ্যাক্সেস সংস্থানগুলি দেখুন।

কোডে সংস্থান অ্যাক্সেস করুন

আপনি পদ্ধতি প্যারামিটার হিসাবে রিসোর্স আইডি পাস করে কোডে একটি সংস্থান ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি setImageResource() ব্যবহার করে res/drawable/myimage.png সংস্থানটি ব্যবহার করতে একটি ImageView সেট করতে পারেন:

কোটলিন

val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)

জাভা

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

আপনি Resources পদ্ধতিগুলি ব্যবহার করে পৃথক সংস্থানগুলিও পুনরুদ্ধার করতে পারেন, যা আপনি getResources() এর সাথে একটি উদাহরণ পেতে পারেন।

বাক্য গঠন

কোডে একটি সংস্থান উল্লেখ করার জন্য এখানে বাক্য গঠন:

[<package_name>.]R.<resource_type>.<resource_name>
  • <package_name> সেই প্যাকেজের নাম যেখানে সংস্থানটি অবস্থিত (আপনার নিজের প্যাকেজ থেকে সংস্থানগুলি উল্লেখ করার সময় প্রয়োজন হয় না)।
  • <resource_type> > রিসোর্স ধরণের জন্য R সাবক্লাস।
  • <resource_name> হয় এক্সটেনশন ছাড়াই রিসোর্স ফাইলের নাম বা android:name বৈশিষ্ট্যযুক্ত মান।

প্রতিটি সংস্থান প্রকার এবং সেগুলি কীভাবে উল্লেখ করবেন সে সম্পর্কে আরও তথ্যের জন্য, রিসোর্স প্রকারগুলি ওভারভিউ দেখুন।

ব্যবহারের ক্ষেত্রে

এমন অনেকগুলি পদ্ধতি রয়েছে যা একটি রিসোর্স আইডি প্যারামিটার গ্রহণ করে এবং আপনি Resources পদ্ধতি ব্যবহার করে সংস্থানগুলি পুনরুদ্ধার করতে পারেন। আপনি Context.getResources() ব্যবহার করে Resources একটি উদাহরণ পেতে পারেন।

কোডে সংস্থানগুলি অ্যাক্সেস করার কয়েকটি উদাহরণ এখানে রয়েছে:

কোটলিন

// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in))

// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)

জাভা

// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

সতর্কতা: হাত দিয়ে R.java ফাইলটি সংশোধন করবেন না। আপনার প্রকল্পটি সংকলিত হলে এটি aapt সরঞ্জাম দ্বারা উত্পাদিত হয়। পরের বার আপনি সংকলন করার পরে কোনও পরিবর্তন ওভাররাইড করা হবে।

এক্সএমএল থেকে সংস্থান অ্যাক্সেস করুন

আপনি বিদ্যমান সংস্থার রেফারেন্স ব্যবহার করে কিছু এক্সএমএল বৈশিষ্ট্য এবং উপাদানগুলির জন্য মানগুলি সংজ্ঞায়িত করতে পারেন। আপনার উইজেটগুলির জন্য স্ট্রিং এবং চিত্র সরবরাহ করতে আপনি প্রায়শই লেআউট ফাইল তৈরি করার সময় এটি করেন।

উদাহরণস্বরূপ, আপনি যদি আপনার বিন্যাসে একটি Button যুক্ত করেন তবে বোতামের পাঠ্যের জন্য একটি স্ট্রিং রিসোর্স ব্যবহার করুন:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

বাক্য গঠন

একটি এক্সএমএল রিসোর্সে একটি সংস্থান উল্লেখ করার জন্য এখানে বাক্য গঠন:

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name> হ'ল প্যাকেজটির নাম যেখানে সংস্থানটি অবস্থিত (একই প্যাকেজ থেকে সংস্থানগুলি উল্লেখ করার সময় প্রয়োজন হয় না)।
  • <resource_type> > রিসোর্স ধরণের জন্য R সাবক্লাস।
  • <resource_name> হয় এক্সটেনশন ছাড়াই রিসোর্স ফাইলের নাম বা android:name বৈশিষ্ট্যযুক্ত মান।

প্রতিটি সংস্থান প্রকার এবং সেগুলি কীভাবে উল্লেখ করবেন সে সম্পর্কে আরও তথ্যের জন্য, রিসোর্স প্রকারগুলি ওভারভিউ দেখুন।

ব্যবহারের ক্ষেত্রে

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

পাঠ্য রঙ এবং পাঠ্য স্ট্রিং সেট করতে আপনি নিম্নলিখিত লেআউট ফাইলে এই সংস্থানগুলি ব্যবহার করতে পারেন:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

এই ক্ষেত্রে, আপনাকে রিসোর্স রেফারেন্সে প্যাকেজের নাম নির্দিষ্ট করার দরকার নেই, কারণ সংস্থানগুলি আপনার নিজের প্যাকেজ থেকে। একটি সিস্টেম রিসোর্স উল্লেখ করতে, আপনাকে প্যাকেজের নামটি অন্তর্ভুক্ত করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />

দ্রষ্টব্য: সর্বদা স্ট্রিং সংস্থান ব্যবহার করুন, যাতে আপনার অ্যাপ্লিকেশনটি অন্যান্য ভাষার জন্য স্থানীয়করণ করা যায়। বিকল্প সংস্থান তৈরি করার তথ্যের জন্য (যেমন স্থানীয় স্ট্রিং), বিকল্প সংস্থান সরবরাহ করুন দেখুন। অন্যান্য ভাষার জন্য আপনার অ্যাপ্লিকেশনটিকে স্থানীয়করণের সম্পূর্ণ গাইডের জন্য, আপনার অ্যাপ্লিকেশনটিকে স্থানীয়করণ দেখুন।

এমনকি আপনি এলিয়াস তৈরি করতে এক্সএমএলে সংস্থানগুলি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি অঙ্কনযোগ্য সংস্থান তৈরি করতে পারেন যা অন্য অঙ্কনযোগ্য সংস্থার জন্য একটি উপনাম:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />

এটি অপ্রয়োজনীয় শোনায় তবে বিকল্প সংস্থান ব্যবহার করার সময় এটি খুব কার্যকর হতে পারে। আরও তথ্যের জন্য, ওরফে সংস্থান তৈরি করার বিভাগটি দেখুন।

রেফারেন্স স্টাইল বৈশিষ্ট্য

একটি স্টাইল অ্যাট্রিবিউট রিসোর্স আপনাকে বর্তমানে প্রয়োগিত থিমের একটি বৈশিষ্ট্যের মান উল্লেখ করতে দেয়। একটি স্টাইল বৈশিষ্ট্য উল্লেখ করা আপনাকে একটি হার্ডকোডড মান সরবরাহের পরিবর্তে বর্তমান থিম দ্বারা সরবরাহিত স্ট্যান্ডার্ড বৈচিত্রগুলি মেলে স্টাইলিংয়ের মাধ্যমে ইউআই উপাদানগুলির চেহারাটি কাস্টমাইজ করতে দেয়। শৈলীর বৈশিষ্ট্যটি উল্লেখ করে মূলত বলে, "বর্তমান থিমের এই বৈশিষ্ট্য দ্বারা সংজ্ঞায়িত স্টাইলটি ব্যবহার করুন" "

একটি স্টাইল বৈশিষ্ট্য উল্লেখ করতে, নাম সিনট্যাক্সটি প্রায় সাধারণ সংস্থান ফর্ম্যাটের সাথে প্রায় একই রকম, তবে "এটি" প্রতীক ( @ ) এর পরিবর্তে একটি প্রশ্ন চিহ্ন ( ? ) ব্যবহার করুন। রিসোর্স টাইপ অংশটি al চ্ছিক। সুতরাং রেফারেন্স সিনট্যাক্সটি নিম্নরূপ:

?[<package_name>:][<resource_type>/]<resource_name>

উদাহরণস্বরূপ, আপনি সিস্টেম থিমের গৌণ পাঠ্য রঙের সাথে মেলে পাঠ্য রঙ সেট করতে আপনি কীভাবে একটি বৈশিষ্ট্য উল্লেখ করতে পারেন তা এখানে:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

এখানে, android:textColor বৈশিষ্ট্যটি বর্তমান থিমটিতে একটি স্টাইল বৈশিষ্ট্যের নাম নির্দিষ্ট করে। অ্যান্ড্রয়েড এখন android:textColorSecondary স্টাইলের বৈশিষ্ট্য android:textColor । যেহেতু সিস্টেম রিসোর্স সরঞ্জামটি জানে যে এই প্রসঙ্গে একটি অ্যাট্রিবিউট রিসোর্স প্রত্যাশিত, আপনাকে স্পষ্টভাবে প্রকারটি বর্ণনা করার দরকার নেই, যা ?android:attr/textColorSecondary । আপনি attr টাইপ বাদ দিতে পারেন।

মূল ফাইলগুলি অ্যাক্সেস করুন

অস্বাভাবিক থাকাকালীন, আপনার আপনার মূল ফাইল এবং ডিরেক্টরিগুলি অ্যাক্সেসের প্রয়োজন হতে পারে। যদি আপনি এটি করেন তবে আপনার ফাইলগুলি res/ সংরক্ষণ করা আপনার পক্ষে কাজ করবে না, কারণ res/ রিসোর্স আইডির সাথে রয়েছে। পরিবর্তে, আপনি assets/ ডিরেক্টরিতে আপনার সংস্থানগুলি সংরক্ষণ করতে পারেন।

assets/ ডিরেক্টরিতে সংরক্ষিত ফাইলগুলিকে কোনও রিসোর্স আইডি দেওয়া হয় না , সুতরাং আপনি সেগুলি R ক্লাস বা এক্সএমএল সংস্থান থেকে উল্লেখ করতে পারবেন না। পরিবর্তে, আপনি একটি সাধারণ ফাইল সিস্টেমের মতো assets/ ডিরেক্টরিতে ফাইলগুলি অনুসন্ধান করতে পারেন এবং AssetManager ব্যবহার করে কাঁচা ডেটা পড়তে পারেন।

তবে, যদি আপনার প্রয়োজন হয় তবে কাঁচা ডেটা (যেমন একটি ভিডিও বা অডিও ফাইল) পড়ার ক্ষমতা যদি হয় তবে ফাইলটি res/raw/ ডিরেক্টরিতে সংরক্ষণ করুন এবং openRawResource() ব্যবহার করে বাইটের একটি স্ট্রিম পড়ুন।

প্ল্যাটফর্ম সংস্থান অ্যাক্সেস

অ্যান্ড্রয়েডে স্টাইল, থিম এবং লেআউটগুলির মতো বেশ কয়েকটি স্ট্যান্ডার্ড সংস্থান রয়েছে। এই সংস্থানগুলি অ্যাক্সেস করতে, android প্যাকেজ নামের সাথে আপনার সংস্থান রেফারেন্সটি যোগ্য করে তুলুন। উদাহরণস্বরূপ, অ্যান্ড্রয়েড একটি ListAdapter তালিকা আইটেমগুলির জন্য ব্যবহার করতে পারেন এমন একটি লেআউট সংস্থান সরবরাহ করে:

কোটলিন

listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)

জাভা

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

এই উদাহরণে, simple_list_item_1 একটি ListView আইটেমগুলির জন্য প্ল্যাটফর্ম দ্বারা সংজ্ঞায়িত একটি লেআউট রিসোর্স। আপনি তালিকা আইটেমগুলির জন্য নিজের লেআউট তৈরি করার পরিবর্তে এটি ব্যবহার করতে পারেন।

সংস্থানগুলির সাথে সেরা ডিভাইসের সামঞ্জস্যতা সরবরাহ করুন

আপনার অ্যাপ্লিকেশন একাধিক ডিভাইস কনফিগারেশন সমর্থন করার জন্য, এটি আপনার অ্যাপ্লিকেশনটি ব্যবহার করে এমন প্রতিটি ধরণের সংস্থানগুলির জন্য সর্বদা ডিফল্ট সংস্থান সরবরাহ করা খুব গুরুত্বপূর্ণ।

উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটি বেশ কয়েকটি ভাষা সমর্থন করে তবে সর্বদা একটি values/ ডিরেক্টরি (যাতে আপনার স্ট্রিংগুলি সংরক্ষণ করা হয়) কোনও ভাষা এবং অঞ্চল বাছাইপর্ব ছাড়াই অন্তর্ভুক্ত করে। যদি আপনি তার পরিবর্তে আপনার সমস্ত স্ট্রিং ফাইলগুলি ডিরেক্টরিগুলিতে রাখেন যাতে একটি ভাষা এবং অঞ্চল বাছাইপর্ব রয়েছে, তবে আপনার অ্যাপ্লিকেশনটি এমন কোনও ডিভাইসে চালানোর সময় আপনার অ্যাপ্লিকেশন ক্র্যাশ হয়ে যায় যা আপনার স্ট্রিংগুলি সমর্থন করে না এমন ভাষায় সেট করে।

যতক্ষণ আপনি ডিফল্ট values/ সংস্থান সরবরাহ করেন, ততক্ষণ আপনার অ্যাপ্লিকেশনটি সঠিকভাবে চালিত হয়, এমনকি ব্যবহারকারী যে ভাষাটি উপস্থাপন করে তা বুঝতে না পারলেও। এটি ক্র্যাশ করার চেয়ে ভাল।

তেমনিভাবে, আপনি যদি স্ক্রিন ওরিয়েন্টেশনের উপর ভিত্তি করে বিভিন্ন লেআউট সংস্থান সরবরাহ করেন তবে আপনার ডিফল্ট হিসাবে একটি ওরিয়েন্টেশন বেছে নিন। উদাহরণস্বরূপ, layout-land/ ল্যান্ডস্কেপ এবং layout-port/ প্রতিকৃতির জন্য লেআউট সংস্থান সরবরাহের পরিবর্তে, একটি ডিফল্ট হিসাবে ছেড়ে দিন, যেমন layout/ ল্যান্ডস্কেপ এবং layout-port/ প্রতিকৃতির জন্য।

ডিফল্ট সংস্থান সরবরাহ করা কেবল গুরুত্বপূর্ণ কারণ আপনার অ্যাপ্লিকেশনটি এমন একটি কনফিগারেশনে চলতে পারে যা আপনি প্রত্যাশিত ছিলেন না, তবে অ্যান্ড্রয়েডের নতুন সংস্করণগুলি কখনও কখনও কনফিগারেশন কোয়ালিফায়ার যুক্ত করে যা পুরানো সংস্করণগুলি সমর্থন করে না। আপনি যদি একটি নতুন রিসোর্স কোয়ালিফায়ার ব্যবহার করেন তবে অ্যান্ড্রয়েডের পুরানো সংস্করণগুলির সাথে কোডের সামঞ্জস্যতা বজায় রাখুন, তবে যখন অ্যান্ড্রয়েডের একটি পুরানো সংস্করণ আপনার অ্যাপ্লিকেশনটি চালায়, আপনি যদি ডিফল্ট সংস্থান সরবরাহ না করেন তবে এটি ক্র্যাশ হয়ে যায়, কারণ এটি দিয়ে নামযুক্ত সংস্থানগুলি ব্যবহার করতে পারে না নতুন বাছাইপর্ব।

উদাহরণস্বরূপ, যদি আপনার minSdkVersion 4 টিতে সেট করা থাকে এবং আপনি নাইট মোড ( night বা notnight , যা এপিআই স্তর 8 এ যুক্ত করা হয়েছিল) ব্যবহার করে আপনার সমস্ত অঙ্কনযোগ্য সংস্থানকে যোগ্য করে তোলেন, তবে একটি এপিআই স্তর 4 ডিভাইস আপনার অঙ্কনযোগ্য সংস্থানগুলি অ্যাক্সেস করতে পারে না এবং ক্র্যাশ এই ক্ষেত্রে, আপনি সম্ভবত notnight আপনার ডিফল্ট সংস্থান হতে চান না, তাই সেই যোগ্যতাটি বাদ দিন এবং আপনার অঙ্কনযোগ্য সংস্থানগুলি drawable/ অথবা drawable-night/ এ রাখুন।

সংক্ষেপে, সেরা ডিভাইসের সামঞ্জস্যতা সরবরাহ করতে, আপনার অ্যাপ্লিকেশনটিকে সঠিকভাবে সম্পাদন করার জন্য প্রয়োজনীয় সংস্থানগুলির জন্য সর্বদা ডিফল্ট সংস্থান সরবরাহ করে। তারপরে কনফিগারেশন কোয়ালিফায়ার ব্যবহার করে নির্দিষ্ট ডিভাইস কনফিগারেশনের জন্য বিকল্প সংস্থান তৈরি করুন।

এই নিয়মের একটি ব্যতিক্রম রয়েছে: যদি আপনার অ্যাপ্লিকেশনটির minSdkVersion 4 বা তার বেশি হয় তবে আপনি যখন স্ক্রিন ঘনত্বের বাছাইপর্বের সাথে বিকল্প অঙ্কনযোগ্য সংস্থান সরবরাহ করেন তখন আপনার ডিফল্ট অঙ্কনযোগ্য সংস্থানগুলির প্রয়োজন হয় না । এমনকি ডিফল্ট অঙ্কনযোগ্য সংস্থান ছাড়াই, অ্যান্ড্রয়েড বিকল্প পর্দার ঘনত্বের মধ্যে সেরা ম্যাচটি খুঁজে পেতে পারে এবং প্রয়োজনীয় হিসাবে বিটম্যাপগুলি স্কেল করতে পারে। তবে, সমস্ত ধরণের ডিভাইসে সেরা অভিজ্ঞতার জন্য, তিনটি ধরণের ঘনত্বের জন্য বিকল্প অঙ্কন সরবরাহ করুন।

অ্যান্ড্রয়েড কীভাবে সেরা ম্যাচিং রিসোর্সটি খুঁজে পায়

আপনি যখন এমন কোনও সংস্থার জন্য অনুরোধ করেন যার জন্য আপনি বিকল্প সরবরাহ করেন, অ্যান্ড্রয়েড বর্তমান ডিভাইস কনফিগারেশনের উপর নির্ভর করে রানটাইমে কোন বিকল্প সংস্থান ব্যবহার করতে হবে তা নির্বাচন করে। অ্যান্ড্রয়েড কীভাবে একটি বিকল্প সংস্থান নির্বাচন করে তা প্রদর্শনের জন্য, নিম্নলিখিত অঙ্কনযোগ্য ডিরেক্টরিগুলিতে প্রতিটি একই চিত্রের বিভিন্ন সংস্করণ রয়েছে বলে ধরে নিন:

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

এবং ধরে নিন নিম্নলিখিতটি ডিভাইস কনফিগারেশন:

লোকেল = en-GB
স্ক্রিন ওরিয়েন্টেশন = port
স্ক্রিন পিক্সেল ঘনত্ব = hdpi
টাচস্ক্রিন টাইপ = notouch
প্রাথমিক পাঠ্য ইনপুট পদ্ধতি = 12key

ডিভাইস কনফিগারেশনটিকে উপলভ্য বিকল্প সংস্থানগুলির সাথে তুলনা করে, অ্যান্ড্রয়েড drawable-en-port থেকে অঙ্কনযোগ্য নির্বাচন করে।

নিম্নলিখিত যুক্তিগুলির সাথে কোন সংস্থানগুলি ব্যবহার করতে হবে তার সিদ্ধান্তে সিস্টেমটি আসে:

চিত্র 2. অ্যান্ড্রয়েড কীভাবে সেরা ম্যাচিং রিসোর্সটি খুঁজে পায় তার ফ্লোচার্ট।

  1. ডিভাইস কনফিগারেশনের বিরোধিতা করে এমন রিসোর্স ফাইলগুলি নির্মূল করুন।

    drawable-fr-rCA/ ডিরেক্টরিটি নির্মূল করা হয়েছে, কারণ এটি en-GB লোকেলের বিরোধিতা করে।

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    ব্যতিক্রম: স্ক্রিন পিক্সেল ঘনত্ব হ'ল এক যোগ্যতা যা কোনও দ্বন্দ্বের কারণে মুছে ফেলা হয় না। যদিও ডিভাইসের স্ক্রিন ঘনত্ব এইচডিপিআই, drawable-port-ldpi/ নির্মূল করা হয় না কারণ প্রতিটি স্ক্রিনের ঘনত্বকে এই মুহুর্তে একটি ম্যাচ হিসাবে বিবেচনা করা হয়। তথ্যের জন্য, স্ক্রিনের সামঞ্জস্যতা ওভারভিউ দেখুন।

  2. তালিকায় পরবর্তী সর্বোচ্চ-পূর্ব-পূর্বের বাছাইপর্বটি সন্ধান করুন ( সারণী 2 )। (এমসিসি দিয়ে শুরু করুন।)
  3. রিসোর্স ডিরেক্টরিগুলির মধ্যে কি এই বাছাইপর্বকে অন্তর্ভুক্ত করে?
    • যদি না হয় তবে দ্বিতীয় ধাপে ফিরে আসুন এবং পরবর্তী বাছাইপর্বটি দেখুন। এই উদাহরণে, ভাষার যোগ্যতা অর্জন না করা পর্যন্ত উত্তরটি "না" হয়।
    • যদি হ্যাঁ, চার ধাপে চালিয়ে যান।
  4. এই বাছাইপর্বকে অন্তর্ভুক্ত করে না এমন রিসোর্স ডিরেক্টরিগুলি নির্মূল করুন। এই উদাহরণে, পরবর্তী সিস্টেমটি এমন সমস্ত ডিরেক্টরিগুলি সরিয়ে দেয় যা কোনও ভাষা বাছাইপর্বকে অন্তর্ভুক্ত করে না:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    ব্যতিক্রম: যদি প্রশ্নে বাছাইপর্বটি স্ক্রিন পিক্সেল ঘনত্ব হয় তবে অ্যান্ড্রয়েড বিকল্পটি নির্বাচন করে যা ডিভাইসের স্ক্রিনের ঘনত্বের সাথে সবচেয়ে ঘনিষ্ঠভাবে মেলে। সাধারণভাবে, অ্যান্ড্রয়েড একটি ছোট মূল চিত্রটি স্কেলিংয়ের জন্য একটি বৃহত্তর মূল চিত্রটি স্কেলিং করতে পছন্দ করে। আরও তথ্যের জন্য, স্ক্রিনের সামঞ্জস্যতা ওভারভিউ দেখুন।

  5. কেবল একটি ডিরেক্টরি না হওয়া পর্যন্ত দুই, তিন এবং চারটি পদক্ষেপ পুনরাবৃত্তি করুন। এই উদাহরণে, স্ক্রিন ওরিয়েন্টেশন হ'ল পরবর্তী বাছাইপর্ব যার জন্য কোনও মিল রয়েছে। সুতরাং, যে সংস্থানগুলি কোনও স্ক্রিন ওরিয়েন্টেশন নির্দিষ্ট করে না সেগুলি মুছে ফেলা হয়:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    অবশিষ্ট ডিরেক্টরিটি drawable-en-port

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

স্ক্রিনের আকারের বাছাইপর্বের উপর ভিত্তি করে সংস্থানগুলি নির্বাচন করার সময়, সিস্টেমটি আরও ভাল মেলে এমন কোনও সংস্থান না থাকলে বর্তমান পর্দার চেয়ে ছোট স্ক্রিনের জন্য ডিজাইন করা সংস্থানগুলি ব্যবহার করে। উদাহরণস্বরূপ, একটি বৃহত আকারের স্ক্রিনটি প্রয়োজনে স্বাভাবিক আকারের স্ক্রিন সংস্থান ব্যবহার করে।

তবে, যদি কেবলমাত্র উপলভ্য সংস্থানগুলি বর্তমান স্ক্রিনের চেয়ে বড় হয় তবে অন্য কোনও সংস্থান ডিভাইস কনফিগারেশনের সাথে মেলে না যদি সিস্টেমগুলি সেগুলি ব্যবহার করে না এবং আপনার অ্যাপ্লিকেশন ক্র্যাশ হয় না। এটি ঘটে, উদাহরণস্বরূপ, যদি সমস্ত লেআউট সংস্থানগুলি xlarge বাছাইপর্বের সাথে ট্যাগ করা হয় তবে ডিভাইসটি একটি সাধারণ আকারের স্ক্রিন।

দ্রষ্টব্য: কোয়ালিফায়ারের অগ্রাধিকার ( টেবিল 2 এ) ডিভাইসটির সাথে ঠিক মেলে এমন বাছাইপর্বের সংখ্যার চেয়ে বেশি গুরুত্বপূর্ণ। পূর্ববর্তী উদাহরণে, চতুর্থ ধাপে তালিকার শেষ পছন্দটিতে তিনটি কোয়ালিফায়ার অন্তর্ভুক্ত রয়েছে যা ডিভাইসের সাথে হুবহু মেলে (ওরিয়েন্টেশন, টাচস্ক্রিন টাইপ এবং ইনপুট পদ্ধতি), যখন drawable-en একটি মাত্র প্যারামিটার রয়েছে যা মেলে (ভাষা)। যাইহোক, এই অন্যান্য বাছাইপর্বের তুলনায় ভাষার উচ্চতর অগ্রাধিকার রয়েছে, সুতরাং drawable-port-notouch-12key মুছে ফেলা হয়েছে।