একটি প্যানেল কনফিগার করুন

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

প্যানেল তালিকা

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <array name="window_states">
       <item>@xml/app_panel</item>
       <item>@xml/back_panel</item>
       ...
   </array>
</resources>

প্যানেলের সংজ্ঞা

স্কেলেবল UI ফ্রেমওয়ার্কের প্রতিটি প্যানেল <TaskPanel> বা <DecorPanel> নামের একটি XML ট্যাগ দিয়ে সংজ্ঞায়িত করা হয়। <TaskPanel> একটি অ্যাপ কন্টেইনারের বৈশিষ্ট্য বর্ণনা করে, অন্যদিকে <DecorPanel> একটি ভিউ কন্টেইনারের বৈশিষ্ট্য বর্ণনা করে। সিস্টেম UI এই প্যানেল ডেফিনিশনগুলো লোড করে এবং অন্য কোনো কনফিগারেশন লোড না হওয়া পর্যন্ত প্যানেলগুলোকে ট্র্যাক করে। উদাহরণস্বরূপ, রোটেশনের কারণে কনফিগারেশন পরিবর্তন বা একটি সুস্পষ্ট সিস্টেম অনুরোধের মাধ্যমে এটি হতে পারে। <TaskPanel> এবং <DecorPanel> কনফিগারযোগ্য UI কম্পোনেন্টের মাধ্যমে একটি কাস্টমাইজড অভিজ্ঞতা তৈরির জন্য ভিত্তিগত উপাদান হিসেবে কাজ করে।

XML অ্যাট্রিবিউট

<TaskPanel> ট্যাগে এই অ্যাট্রিবিউটগুলো থাকতে পারে, যা ব্যবহার করে স্টেট ও ট্রানজিশন নির্ধারণ করা যায়।

বৈশিষ্ট্য অবস্থা বর্ণনা
id বাধ্যতামূলক প্যানেলের জন্য একটি অনন্য শনাক্তকারী নির্দিষ্ট করে। এই অ্যাট্রিবিউটটি PanelPool থেকে প্যানেলটি পুনরুদ্ধার করতে এবং সিস্টেমের মধ্যে এর অবস্থা পরিচালনা করতে ব্যবহৃত হয়।
role বাধ্যতামূলক সিস্টেমে প্যানেলটির উদ্দেশ্য বা কার্যকারিতা নির্ধারণ করে। এই মানটি একটি স্ট্রিং রিসোর্স, কম্পোনেন্টের নামগুলোর একটি স্ট্রিং অ্যারে, অথবা একটি লেআউট আইডি নির্দেশ করতে পারে। উদাহরণস্বরূপ, এটি এমন স্থায়ী অ্যাক্টিভিটিগুলো নির্ধারণ করতে পারে যা প্যানেলে সর্বদা প্রদর্শিত হওয়া উচিত, অথবা এমন একটি লেআউট নির্ধারণ করতে পারে যা ইনফ্লেট করা হবে।
defaultVariant ঐচ্ছিক প্যানেলটি লোড হওয়ার সময় প্রাথমিকভাবে যে ভ্যারিয়েন্টটি গ্রহণ করবে, তার আইডি নির্দিষ্ট করে। যদি এটি নির্দিষ্ট করা না থাকে, তবে সিস্টেমটি প্রথম সংজ্ঞায়িত ভ্যারিয়েন্টটিকে ডিফল্ট হিসেবে ব্যবহার করতে পারে।
displayId ঐচ্ছিক যে ডিসপ্লেতে প্যানেলটি প্রদর্শিত হওয়ার কথা, তার আইডি নির্দিষ্ট করে।
defaultLayer ঐচ্ছিক প্যানেলের ভ্যারিয়েন্টগুলো যদি সুস্পষ্টভাবে কোনো লেয়ার নির্ধারণ না করে, তবে সেগুলোর জন্য একটি ডিফল্ট Z-অর্ডার নির্দিষ্ট করে দেওয়া যেতে পারে।
controller ঐচ্ছিক,
পরিবর্তন সাপেক্ষ

এটি এমন একটি রিসোর্সকে (সাধারণত একটি XML ID) নির্দেশ করে, যা একটি প্যানেল-নির্দিষ্ট কন্ট্রোলারকে সংজ্ঞায়িত করে এবং এর মাধ্যমে কাস্টম প্যানেল কন্ট্রোলারগুলিতে কনফিগারেশন মান সংরক্ষণ ও প্রেরণ করা যায়।

এই কন্ট্রোলারগুলোকে অবশ্যই com.android.car.scalableui.panel.TaskPanelController ইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে। এই কন্ট্রোলারগুলোর একটি সাধারণ ব্যবহার হলো প্যানেলে নমনীয় রানটাইম টাস্ক বরাদ্দ নির্ধারণ করা।

XML চাইল্ড এলিমেন্ট

<TaskPanel> এবং <DecorPanel> ট্যাগগুলোর মধ্যে বৈশিষ্ট্য ও ডিফল্ট আচরণ নির্ধারণ করার জন্য এই চাইল্ড এলিমেন্টগুলো অন্তর্ভুক্ত করা যেতে পারে।

বৈশিষ্ট্য বর্ণনা
<Variant>

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

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

<KeyFrameVariant> <Variant> এর এক্সটেনশন একটি অবিচ্ছিন্ন ভগ্নাংশ মানের (০ থেকে ১) উপর ভিত্তি করে বিভিন্ন ভ্যারিয়েন্টের মধ্যে ভিজ্যুয়াল বৈশিষ্ট্যগুলির ইন্টারপোলেশন করতে দেয় এবং এটি মসৃণ ও গতিশীল ট্রানজিশনের জন্য ব্যবহৃত হয়, যেমন ড্র্যাগ অপারেশনের সময়, যখন প্যানেলের অবস্থা ড্র্যাগ অ্যামাউন্টের মতো একটি অবিচ্ছিন্ন ইনপুটের উপর নির্ভর করে।
<Transitions>

নেস্টেড ট্যাগে <Transition> ডেফিনিশনগুলোর একটি সংগ্রহ থাকে, যা বর্ণনা করে যে UI কীভাবে বিভিন্ন ভ্যারিয়েন্টের মধ্যে অ্যানিমেট করবে।

প্রতিটি <Transition> তার শুরুশেষের রূপ, যে ইভেন্টটি এটিকে ট্রিগার করে তা নির্ধারণ করে এবং ঐচ্ছিকভাবে অ্যানিমেশনের জন্য একটি কাস্টম অ্যানিমেটর, সেইসাথে একটি সময়কাল ও ইন্টারপোলেটর নির্দিষ্ট করতে পারে।

<TaskPanel> ট্যাগে টাস্ক-নির্দিষ্ট আচরণ নির্ধারণের জন্য এই বিশেষ চাইল্ড এলিমেন্টগুলোও অন্তর্ভুক্ত করা যেতে পারে।

বৈশিষ্ট্য বর্ণনা
<Restart> একটি টাস্কপ্যানেল খালি হয়ে গেলে যে রিস্টার্ট পলিসি প্রয়োগ করা হবে, তা বর্ণনা করার জন্য ব্যবহৃত নেস্টেড ট্যাগ। এই ট্যাগটি ' policy অ্যাট্রিবিউট সমর্থন করে, যা DEFAULT বা LAST এ সেট করা যেতে পারে, এবং maxRetry সমর্থন করে, যা টাইম আউট হওয়ার আগে কতবার রিস্টার্ট করার চেষ্টা করা হবে তা নির্দিষ্ট করে।
<TaskBehavior> এই প্যানেলে টাস্ক চালু হওয়ার আচরণ বর্ণনা করার জন্য ব্যবহৃত নেস্টেড ট্যাগ। এই ট্যাগটি newTaskLaunchPolicy অ্যাট্রিবিউট সমর্থন করে, যা এই টাস্কপ্যানেল থেকে নতুন টাস্ক চালু হওয়ার আচরণ কনফিগার করে। এই পলিসির জন্য বৈধ কনফিগারেশন মানগুলো হলো DEFAULT , REMAIN_IN_SOURCE , অথবা REPARENT_TO_SOURCE

নমুনা কোড

<TaskPanel id="@+id/panelId"
           role="@array/roleValue"
           defaultVariant="@id/closed"
           displayId="0" >

 <Variant id="@+id/base">
        <Bounds left="0" top="0" width="100%" height="100%"/>
 </Variant>

<Variant id="@+id/opened" parent="@id/base">
    <Visibility isVisible="true"/>
</Variant>
<Variant id="@+id/closed"  parent="@id/base">
    <Visibility isVisible="false"/>
</Variant>

<Transitions>
    <Transition fromVariant="@id/closed"
                toVariant="@id/opened"
                onEvent="open_event"/>
        <Event id="_System_TaskOpenEvent" panelId="@id/panelId" />
    </Transition>
</Transitions>
</TaskPanel>