Android ডিভাইস কানেক্ট করা ডিসপ্লেতে নির্বিঘ্নে এক্সটেন্ড করা যায়
৭ মিনিট লাগবে
Android-এ মোবাইল ও ডেস্কটপ কম্পিউটিংকে আরও কাছাকাছি আনার ক্ষেত্রে একটি বড় মাইলস্টোন ঘোষণা করতে পেরে আমরা আনন্দিত: কানেক্ট করা ডিসপ্লে সংক্রান্ত সহায়তা Android 16 QPR3 রিলিজের সাথে জেনেরাল অ্যাভেইলেবিলিটিতে পৌঁছেছে!
যেমন Google I/O 2025-এ দেখানো হয়েছে, কানেক্ট করা ডিসপ্লে ব্যবহারকারীদের তাদের Android ডিভাইসগুলিকে একটি এক্সটার্নাল মনিটরের সাথে কানেক্ট করতে এবং সাথে সাথে একটি ডেস্কটপ উইন্ডো এনভায়রনমেন্ট অ্যাক্সেস করতে দেয়। অ্যাপগুলি ফ্রি-ফর্ম বা ম্যাক্সিমাইজ করা উইন্ডোতে ব্যবহার করা যেতে পারে এবং ব্যবহারকারীরা ডেস্কটপ OS-এর মতোই মাল্টিটাস্ক করতে পারেন।
Google এবং Samsung একসাথে কাজ করে Android 16-এ চলা Android ইকোসিস্টেমের ডিভাইসগুলিতে এক্সটার্নাল ডিসপ্লের সাথে কানেক্ট করার সময় একটি নিরবচ্ছিন্ন এবং শক্তিশালী ডেস্কটপ উইন্ডোয়িং অভিজ্ঞতা প্রদান করে।
এটি এখন সাধারণত কাজ করে এমন ডিভাইসে* সেইসব ব্যবহারকারীর জন্য উপলভ্য যারা তাদের কাজ করে এমন Pixel এবং Samsung ফোন এক্সটার্নাল মনিটরের সাথে কানেক্ট করতে পারেন, যা ফর্ম ফ্যাক্টর জুড়ে মানিয়ে নেওয়া আরও আকর্ষক এবং আরও প্রোডাক্টিভ অ্যাপ অভিজ্ঞতা তৈরি করার জন্য নতুন সুযোগ এনে দেয়।
এটি কীভাবে কাজ করে?
মানানসই Android ফোন বা ফোল্ডেবল ডিভাইস এক্সটার্নাল ডিসপ্লের সাথে কানেক্ট করা হলে, কানেক্ট করা ডিসপ্লেতে নতুন ডেস্কটপ সেশন শুরু হয়।
কানেক্ট করা ডিসপ্লেতে অভিজ্ঞতা ডেস্কটপের অভিজ্ঞতার মতোই, যার মধ্যে একটি টাস্কবার রয়েছে যা অ্যাক্টিভ অ্যাপ দেখায় এবং ব্যবহারকারীদের দ্রুত অ্যাক্সেসের জন্য অ্যাপ পিন করতে দেয়। ব্যবহারকারীরা কানেক্ট করা ডিসপ্লেতে অবাধে ছোট বড় করা যায় এমন উইন্ডোতে একসাথে একাধিক অ্যাপ পাশাপাশি চালাতে পারবেন।
ফোনটি এক্সটার্নাল ডিসপ্লের সাথে কানেক্ট করা হয়েছে এবং ডিসপ্লেতে ডেস্কটপ সেশন চলছে, তবে ফোনটি তার নিজস্ব স্ট্যাটাস বজায় রেখেছে।
ডেস্কটপ উইন্ডোয়িং কাজ করে এমন ডিভাইস (যেমন Samsung Galaxy Tab S11-এর মতো ট্যাবলেট) এক্সটার্নাল ডিসপ্লের সাথে কানেক্ট করা হলে, ডেস্কটপ সেশন দুটি ডিসপ্লেতেই এক্সটেন্ড করা হয়, যা আরও বড় ওয়ার্কস্পেস আনলক করে। দুটি ডিসপ্লে তখন একটি অবিচ্ছিন্ন সিস্টেম হিসেবে কাজ করে, যার ফলে অ্যাপ উইন্ডো, কন্টেন্ট এবং কার্সর ডিসপ্লেগুলির মধ্যে অবাধে চলাচল করতে পারে।
ট্যাবলেট এক্সটার্নাল ডিসপ্লের সাথে কানেক্ট করা হয়েছে, যা দুটি ডিসপ্লে জুড়ে ডেস্কটপ সেশন এক্সটেন্ড করে।
এটি কেন গুরুত্বপূর্ণ?
Android 16 QPR3 রিলিজের ক্ষেত্রে, আমরা উইন্ডোইং আচরণ, টাস্কবার ইন্টার্যাকশন এবং ইনপুট কম্প্যাটিবিলিটি (মাউস ও কীবোর্ড) চূড়ান্ত করেছি যা কানেক্ট করা ডিসপ্লে অভিজ্ঞতাকে সংজ্ঞায়িত করে। এছাড়াও, আমরা কম্প্যাটিবিলিটি ট্রিটমেন্ট অন্তর্ভুক্ত করেছি যাতে উইন্ডো স্কেল করা যায় এবং ডিসপ্লে পাল্টানোর সময় অ্যাপ রিস্টার্ট করা এড়ানো যায়।
আপনার অ্যাপ অ্যাডাপ্টিভ ডিজাইন নীতি মেনে তৈরি করা হলে, এটি অটোমেটিক ডেস্কটপের মতো দেখাবে ও কাজ করবে এবং ব্যবহারকারীরা স্বাচ্ছন্দ্য বোধ করবেন। অ্যাপটি পোর্ট্রেট মোডে লক করা থাকলে বা শুধুমাত্র টাচ ইন্টারফেসের জন্য তৈরি করা হলে, এখন এটিকে আধুনিক করার সময় এসেছে।
বিশেষ করে, কানেক্ট করা ডিসপ্লেতে অ্যাপের সেরা অভিজ্ঞতা পেতে এইসব পেশাদার পদ্ধতি মেনে চলুন:
- ধরে নেবেন না যে
Displayঅবজেক্টটি অপরিবর্তিত থাকবে: অ্যাপের উইন্ডো এক্সটার্নাল ডিসপ্লেতে সরানো হলে বা ডিসপ্লে কনফিগারেশন পরিবর্তন হলে, আপনার অ্যাপের কনটেক্সটের সাথে যুক্তDisplayঅবজেক্টটি পরিবর্তিত হতে পারে। আপনার অ্যাপের উচিত কনফিগারেশন পরিবর্তন সংক্রান্ত ইভেন্টগুলি সুন্দরভাবে ম্যানেজ করা এবং ডিসপ্লে মেট্রিক্স ক্যাশে করার পরিবর্তে ডায়নামিকভাবে কোয়েরি করা। - ঘনত্ব কনফিগারেশনে পরিবর্তন-এর জন্য অ্যাকাউন্ট: প্রাইমারি ডিভাইসের স্ক্রিনের তুলনায় এক্সটার্নাল ডিসপ্লেতে পিক্সেল ঘনত্ব অনেক আলাদা হতে পারে। UI-এর স্বচ্ছতা ও ব্যবহারযোগ্যতা বজায় রাখতে, আপনার লেআউট ও রিসোর্স এইসব পরিবর্তনের সাথে সঠিকভাবে মানিয়ে নিচ্ছে কিনা তা নিশ্চিত করুন। লেআউটের জন্য ঘনত্ব-নিরপেক্ষ পিক্সেল (dp) ব্যবহার করুন, ঘনত্ব-নির্দিষ্ট রিসোর্স প্রদান করুন এবং আপনার UI যাতে যথাযথভাবে স্কেল হয় তা নিশ্চিত করুন।
- এক্সটার্নাল পেরিফেরাল সঠিকভাবেসাপোর্ট করা: ব্যবহারকারীরা যখন কোনও এক্সটার্নাল মনিটরের সাথে কানেক্ট করেন, তখন তারা প্রায়শই আরও বেশি ডেস্কটপের মতো পরিবেশ তৈরি করেন। এর মধ্যে প্রায়ই এক্সটার্নাল কীবোর্ড, মাউস, ট্র্যাকপ্যাড, ওয়েবক্যাম, মাইক্রোফোন ও স্পিকার ব্যবহার করা হয়। কীবোর্ড এবং মাউস ইন্টার্যাকশনের জন্য সহায়তা উন্নত করুন।
আধুনিক টুলের সাহায্যে ডেস্কটপের ভবিষ্যৎ তৈরি করা
ডেস্কটপ অভিজ্ঞতা তৈরি করতে আমরা আপনাকে সাহায্য করার জন্য বিভিন্ন টুল প্রদান করি। আমাদের কোর অ্যাডাপ্টিভ লাইব্রেরির লেটেস্ট আপডেটগুলি রিক্যাপ করা যাক!
নতুন উইন্ডো সাইজ ক্লাস: বড় এবং অতিরিক্ত বড়
Jetpack WindowManager 1.5.0-এর সবচেয়ে বড় আপডেট হল, দুটি নতুন প্রস্থের উইন্ডো সাইজ ক্লাস যোগ করা হয়েছে: বড় এবং অতিরিক্ত বড়।
উইন্ডো সাইজ ক্লাস হল আমাদের অফিসিয়াল, মতামত ভিত্তিক ভিউপোর্ট ব্রেকপয়েন্টের সেট যা আপনাকে মানানসই লেআউট ডিজাইন ও ডেভেলপ করতে সাহায্য করে। 1.5.0 ভার্সনে, আমরা এই নির্দেশিকাটি সাধারণ ট্যাবলেটের আকারের চেয়ে বড় স্ক্রিনের জন্য প্রসারিত করছি।
এখানে নতুন প্রস্থের ব্রেকপয়েন্ট রয়েছে:
- বড়: ১২০০ডিপি থেকে ১৬০০ডিপি প্রস্থের জন্য
- অতিরিক্ত বড়: ≥১৬০০ডিপি প্রস্থের জন্য
ডিসপ্লের প্রস্থের উপর ভিত্তি করে বিভিন্ন উইন্ডো সাইজ ক্লাস।
খুব বড় সারফেসে, ট্যাবলেটের প্রসারিত লেআউট স্কেল আপ করা সবসময় ব্যবহারকারীর সেরা অভিজ্ঞতা প্রদান করে না। যেমন, কোনও ইমেল ক্লায়েন্ট, এক্সপ্যান্ড করা উইন্ডো সাইজ ক্লাসে দুটি প্যানেল (একটি মেলবক্স ও একটি মেসেজ) সহজেই দেখাতে পারে। কিন্তু একটি অতিরিক্ত-বড় ডেস্কটপ মনিটরে, ইমেল ক্লায়েন্ট সুন্দরভাবে তিনটি বা এমনকি চারটি প্যানেল দেখাতে পারে, সম্ভবত একটি মেলবক্স, একটি মেসেজের তালিকা, সম্পূর্ণ মেসেজের কন্টেন্ট এবং একটি ক্যালেন্ডার/টাস্ক প্যানেল, সবই একবারে।
আপনার প্রোজেক্টে নতুন উইন্ডো সাইজ ক্লাস অন্তর্ভুক্ত করতে, WindowSizeClass.BREAKPOINTS_V1-এর পরিবর্তে WindowSizeClass.BREAKPOINTS_V2 সেট থেকে ফাংশনটি কল করুন:
val currentWindowMetrics =
WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(LocalContext.current)
val sizeClass = WindowSizeClass.BREAKPOINTS_V2
.computeWindowSizeClass(currentWindowMetrics)তারপর, আপনার অ্যাপে অন্তত সেই পরিমাণ জায়গা আছে কিনা তা নিশ্চিত করার পরে সঠিক লেআউট প্রয়োগ করুন:
if(sizeClass.isWidthAtLeastBreakpoint(
WindowSizeClass.WIDTH_DP_LARGE_LOWER_BOUND)){
...
// Window is at least 1200 dp wide.
}Jetpack Navigation 3-এর সাহায্যে অ্যাডাপ্টিভ লেআউট তৈরি করা
Jetpack কালেকশনে Navigation 3 হল লেটেস্ট সংযোজন। Navigation 3, যা এইমাত্র তার প্রথম স্টেবল রিলিজ ভার্সনে পৌঁছেছে, এটি একটি শক্তিশালী নেভিগেশন লাইব্রেরি যা Compose-এর সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।
Navigation 3 হল অ্যাডাপ্টিভ লেআউট তৈরি করার জন্য একটি দুর্দান্ত টুল যা একই সময়ে একাধিক ডেস্টিনেশন দেখানোর অনুমতি দেয় এবং সেই লেআউটগুলির মধ্যে নির্বিঘ্নে পাল্টানোর অনুমতি দেয়।
আপনার অ্যাপের UI ফ্লো ম্যানেজ করার এই সিস্টেমটি দৃশ্যের উপর ভিত্তি করে তৈরি। দৃশ্য হল এমন একটি লেআউট যা একই সময়ে এক বা একাধিক গন্তব্য দেখায়। SceneStrategy নির্ধারণ করে যে এটি কোনও দৃশ্য তৈরি করতে পারবে কিনা। SceneStrategy ইনস্ট্যান্স একসাথে চেইন করার মাধ্যমে আপনি বিভিন্ন স্ক্রিন সাইজ ও ডিভাইস কনফিগারেশনের জন্য বিভিন্ন সিন তৈরি ও দেখাতে পারবেন।
লিস্ট-ডিটেল ও সাপোর্টিং পেনের মতো আউট-অফ-দ্য-বক্স ক্যানোনিকাল লেআউটের জন্য, আপনি Compose Material 3 অ্যাডাপ্টিভ লাইব্রেরি থেকে সিন ব্যবহার করতে পারবেন (ভার্সন ১.৩ ও তার পরবর্তী ভার্সনে উপলভ্য)।
এছাড়াও, সিনের রেসিপি পরিবর্তন করে বা একদম শুরু থেকে আপনার নিজস্ব কাস্টম সিন তৈরি করা সহজ। যেমন, এমন একটি দৃশ্য বিবেচনা করা যাক যেখানে পাশাপাশি তিনটি প্যানেল দেখানো হয়:
class ThreePaneScene<T : Any>(
override val key: Any,
override val previousEntries: List<NavEntry<T>>,
val firstEntry: NavEntry<T>,
val secondEntry: NavEntry<T>,
val thirdEntry: NavEntry<T>
) : Scene<T> {
override val entries: List<NavEntry<T>> = listOf(firstEntry, secondEntry, thirdEntry)
override val content: @Composable (() -> Unit) = {
Row(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.weight(1f)) {
firstEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
secondEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
thirdEntry.Content()
}
}
}এই পরিস্থিতিতে, আপনি একটি SceneStrategy সংজ্ঞায়িত করতে পারেন যাতে উইন্ডোর প্রস্থ যথেষ্ট চওড়া হলে তিনটি প্যান দেখানো যায় এবং আপনার ব্যাক স্ট্যাকের এন্ট্রিগুলি ঘোষণা করেছে যে তারা তিন-প্যান দৃশ্যে প্রদর্শিত হতে পারে।
class ThreePaneSceneStrategy<T : Any>(val windowSizeClass: WindowSizeClass) : SceneStrategy<T> {
override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {
if (windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_LARGE_LOWER_BOUND)) {
val lastThree = entries.takeLast(3)
if (lastThree.size == 3 && lastThree.all { it.metadata.containsKey(MULTI_PANE_KEY) }) {
val firstEntry = lastThree[0]
val secondEntry = lastThree[1]
val thirdEntry = lastThree[2]
return ThreePaneScene(
key = Triple(firstEntry.contentKey, secondEntry.contentKey, thirdEntry.contentKey),
previousEntries = entries.dropLast(3),
firstEntry = firstEntry,
secondEntry = secondEntry,
thirdEntry = thirdEntry
)
}
}
return null
}
}আপনার NavDisplay তৈরি করার সময় আপনি অন্যান্য স্ট্র্যাটেজির সাথে আপনার ThreePaneSceneStrategy ব্যবহার করতে পারবেন। যেমন, তিনটি প্যানেল দেখানোর মতো পর্যাপ্ত জায়গা না থাকলে, আমরা TwoPaneStrategy যোগ করে পাশাপাশি দুটি প্যানেল দেখাতে পারি।
val strategy = ThreePaneSceneStrategy() then TwoPaneSceneStrategy()
NavDisplay(...,
sceneStrategy = strategy,
entryProvider = entryProvider {
entry<MyScreen>(metadata = mapOf(MULTI_PANE_KEY to true))) { ... }
... other entries...
}
)তিন বা দুটি প্যান দেখানোর জন্য পর্যাপ্ত জায়গা না থাকলে—আমাদের দুটি কাস্টম সিন স্ট্র্যাটেজিই null রিটার্ন করে। এই ক্ষেত্রে, NavDisplay ব্যাক স্ট্যাকের শেষ এন্ট্রিটি SinglePaneScene ব্যবহার করে একটি প্যানে দেখানোর জন্য ফিরে আসে।
দৃশ্য ও কৌশল ব্যবহার করে, আপনি নিজের অ্যাপে এক, দুই ও তিন প্যানেল লেআউট যোগ করতে পারবেন!
একটি অ্যাডাপ্টিভ অ্যাপ যা বড় স্ক্রিনে তিন-পেন নেভিগেশন দেখাচ্ছে।
Navigation 3-এ সিন ব্যবহার করে কীভাবে কাস্টম লেআউট তৈরি করবেন সেই সম্পর্কে আরও জানতে ডকুমেন্টেশন চেক করুন।
স্ট্যান্ডঅ্যালোন অ্যাডাপ্টিভ লেআউট
আপনার যদি একটি স্বতন্ত্র লেআউট প্রয়োজন হয়, তাহলে Compose Material 3 অ্যাডাপ্টিভ লাইব্রেরি আপনাকে তালিকা-বিবরণ এবং সহায়ক প্যান লেআউটের মতো অ্যাডাপ্টিভ UI তৈরি করতে সাহায্য করে যা উইন্ডো সাইজ ক্লাস বা ডিভাইসের ভঙ্গির উপর ভিত্তি করে উইন্ডো কনফিগারেশনে অটোমেটিক নিজেকে মানিয়ে নেয়।
সুসংবাদ হল, লাইব্রেরিটি নতুন ব্রেকপয়েন্টের সাথে ইতিমধ্যেই আপ-টু-ডেট! ভার্সন 1.2 থেকে শুরু করে, ডিফল্ট প্যান স্ক্যাফোল্ড ডিরেক্টিভ ফাংশন বড় এবং অতিরিক্ত বড় প্রস্থের উইন্ডো সাইজ ক্লাসকে সাপোর্ট করে।
আপনি নতুন ব্রেকপয়েন্ট ব্যবহার করতে চান তা আপনার Gradle বিল্ড ফাইলে ঘোষণা করে আপনাকে শুধু অপ্ট-ইন করতে হবে:
currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true)
শুরু করা
লেটেস্ট Android রিলিজে কানেক্ট করা ডিসপ্লে ফিচার এক্সপ্লোর করুন। কাজ করে এমন ডিভাইসে Android 16 QPR3 পান, তারপর আজই আপনার অ্যাপ পরীক্ষা করা শুরু করতে এটি একটি এক্সটার্নাল মনিটরের সাথে কানেক্ট করুন!
এইসব পেশাদার পদ্ধতি প্রয়োগ করার ব্যাপারে আরও জানতে, মাল্টি-ডিসপ্লে সাপোর্ট এবং উইন্ডো ম্যানেজমেন্ট সংক্রান্ত আপডেট করা ডকুমেন্টেশন দেখুন।
মতামত
কানেক্ট করা ডিসপ্লে ডেস্কটপ অভিজ্ঞতা আরও উন্নত করার জন্য আপনার মতামত অত্যন্ত গুরুত্বপূর্ণ। আমাদের অফিসিয়াল মতামত জানানোর চ্যানেল-এর মাধ্যমে আপনার মতামত শেয়ার করুন এবং কোনও সমস্যা হলে তা জানান।
আমরা Android-কে এমন একটি বহুমুখী প্ল্যাটফর্ম হিসেবে গড়ে তুলতে প্রতিশ্রুতিবদ্ধ যা ব্যবহারকারীরা তাদের অ্যাপ এবং ডিভাইসের সাথে যেভাবে ইন্টার্যাক্ট করতে চান তার সাথে মানিয়ে নেয়। কানেক্ট করা ডিসপ্লে সংক্রান্ত সহায়তার উন্নতি সেই দিকেই আরেকটি পদক্ষেপ এবং আমরা মনে করি যে আপনার তৈরি করা ডেস্কটপ অভিজ্ঞতা আপনার ব্যবহারকারীরা পছন্দ করবেন!
*মনে রাখবেন: এই নিবন্ধটি লেখার সময়, কানেক্ট করা ডিসপ্লে Pixel 8, 9, 10 সিরিজ এবং S26, Fold7, Flip7 এবং Tab S11 সহ বিভিন্ন ধরনের Samsung ডিভাইসে কাজ করে।
-
প্রোডাক্ট সংক্রান্ত খবরআমরা আনন্দের সাথে জানাচ্ছি যে Jetpack WindowManager 1.5.0 এখন স্টেবল! এই রিলিজ WindowManager-এ অ্যাডাপ্টিবিলিটির শক্তিশালী ভিত্তির উপর তৈরি করা হয়েছে, যা সব স্ক্রিন সাইজে দারুণ দেখায় এমন পালিশ করা, অ্যাডাপ্টিভ UI তৈরি করা আরও সহজ করে তোলে।
Francesco Romano • ২ মিনিট পড়া -
প্রোডাক্ট সংক্রান্ত খবরএজেন্টিক ডেভেলপমেন্টের গতি বাড়ার সাথে সাথে, Android ইঞ্জিনিয়ারিং একটি নতুন দিগন্তে পৌঁছে যাচ্ছে: সহায়ক কোড সম্পূর্ণ করা থেকে শুরু করে আপনার নির্দেশনায় এন্ড-টু-এন্ড কাজ করা এজেন্ট পর্যন্ত। আপনি যে মডেল ও এজেন্ট ব্যবহার করেন, তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ ও নমনীয়তা থাকে।
Jason Buchel • ৩ মিনিট রিডিং -
প্রোডাক্ট সংক্রান্ত খবরআজ আমরা শেয়ার করেছি যে কীভাবে আমরা আমাদের "স্টোরের চেয়েও বেশি কিছু" ভিশনকে পরবর্তী অধ্যায়ে নিয়ে যাচ্ছি। 'অ্যাকাউন্ট' ট্যাব থেকে, এখন ২৫০ মিলিয়নেরও বেশি মাসিক অ্যাক্টিভ ব্যবহারকারীর জন্য ব্যক্তিগত হোম বেস, আমাদের ইউনিফায়েড গেমিং প্ল্যাটফর্ম ৭০০ মিলিয়নেরও বেশি গেমার প্রোফাইলকে কানেক্ট করছে, Google Play ব্যবহারকারীদের যেখানেই থাকুক না কেন তাদের সাথে কানেক্ট করছে।
Paul Feng • ৩ মিনিট রিডিং
আপনার ইনবক্সে প্রতি সপ্তাহে Android ডেভেলপমেন্ট সংক্রান্ত লেটেস্ট ইনসাইট পান।