ড্রপ-ডাউন মেনু ব্যবহারকারীদের একটি আইকন, টেক্সট ফিল্ড বা অন্য কম্পোনেন্টে ক্লিক করতে দেয় এবং তারপর একটি অস্থায়ী সারফেসে বিকল্পের তালিকা থেকে বেছে নিতে দেয়। এই নির্দেশিকায় বর্ণনা করা হয়েছে কীভাবে সাধারণ মেনু এবং ডিভাইডার ও আইকন সহ আরও জটিল মেনু তৈরি করা যায়।
API সারফেস
কাস্টম ড্রপ-ডাউন মেনু প্রয়োগ করতে DropdownMenu, DropdownMenuItem এবং IconButton
কম্পোনেন্ট ব্যবহার করুন। DropdownMenu এবং
DropdownMenuItem কম্পোনেন্ট মেনু আইটেম দেখানোর জন্য ব্যবহার করা হয়, যেখানে
IconButton হল ড্রপ-ডাউন মেনু দেখানো বা লুকানোর ট্রিগার।
DropdownMenu কম্পোনেন্টের মূল প্যারামিটারে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:
expanded: মেনু দেখা যাচ্ছে কিনা তা নির্দেশ করে।onDismissRequest: মেনু বাতিল করার জন্য ব্যবহার করা হয়।content: মেনুর কম্পোজেবল কন্টেন্ট, সাধারণত এতেDropdownMenuItemকম্পোজেবল থাকে।
DropdownMenuItem-এর জন্য মূল প্যারামিটারে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত থাকে:
text: মেনু আইটেমে দেখানো কন্টেন্ট নির্ধারণ করে।onClick: মেনুতে আইটেমের সাথে ইন্টার্যাকশন ম্যানেজ করার জন্য কলব্যাক।
একটি সাধারণ ড্রপ-ডাউন মেনু তৈরি করা
নিম্নলিখিত স্নিপেটটি একটি ন্যূনতম DropdownMenu বাস্তবায়ন প্রদর্শন করে:
@Composable fun MinimalDropdownMenu() { var expanded by remember { mutableStateOf(false) } Box( modifier = Modifier .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(painter = rememberVectorPainter(AppIcons.MoreVert), contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { DropdownMenuItem( text = { Text("Option 1") }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Option 2") }, onClick = { /* Do something... */ } ) } } }
কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
- দুটি মেনু আইটেম সহ একটি বেসিক
DropdownMenuসংজ্ঞায়িত করে। expandedপ্যারামিটার মেনুর দৃশ্যমানতা বড় বা ছোট করা হিসেবে নিয়ন্ত্রণ করে।onDismissRequestপ্যারামিটারটি একটি কলব্যাককে সংজ্ঞায়িত করে যা ব্যবহারকারী মেনু বন্ধ করলে কার্যকর হয়।DropdownMenuItemকম্পোজ করার উপযুক্ত আইটেম ড্রপ-ডাউন মেনুতে বেছে নেওয়ার উপযুক্ত আইটেমকে দেখায়।IconButton-এর মাধ্যমে মেনু বড় বা আড়াল করা যায়।
ফলাফল
আরও বড় ড্রপ-ডাউন মেনু তৈরি করুন
সব মেনু আইটেম একসাথে দেখানো না গেলে, ডিফল্ট হিসেবে DropdownMenu স্ক্রল করা যায়। নিম্নলিখিত স্নিপেটটি একটি দীর্ঘ, স্ক্রোলযোগ্য ড্রপ-ডাউন মেনু তৈরি করে:
@Composable fun LongBasicDropdownMenu() { var expanded by remember { mutableStateOf(false) } // Placeholder list of 100 strings for demonstration val menuItemData = List(100) { "Option ${it + 1}" } Box( modifier = Modifier .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(painter = rememberVectorPainter(AppIcons.MoreVert), contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { menuItemData.forEach { option -> DropdownMenuItem( text = { Text(option) }, onClick = { /* Do something... */ } ) } } } }
কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
DropdownMenuস্ক্রল করা যায় যখন এর কন্টেন্টের মোট উচ্চতা উপলভ্য স্পেসের থেকে বেশি হয়। এই কোডটি স্ক্রল করা যায় এমনDropdownMenuতৈরি করে যা ১০০টি প্লেসহোল্ডার আইটেম দেখায়।forEachলুপ ডায়নামিকভাবেDropdownMenuItemকম্পোজেবল তৈরি করে। আইটেমগুলি লেজি পদ্ধতিতে তৈরি করা হয়নি, যার অর্থ হল ১০০টি ড্রপ-ডাউন আইটেমই তৈরি করা হয়েছে এবং কম্পোজিশনে রয়েছে।IconButton-এ ক্লিক করা হলে,DropdownMenu-এর সম্প্রসারণ এবং সঙ্কোচন ট্রিগার করে।- প্রতিটি
DropdownMenuItem-এর মধ্যে থাকাonClickল্যাম্বডা আপনাকে ব্যবহারকারীর কোনও মেনু আইটেম বেছে নেওয়ার সময় সম্পন্ন করা অ্যাকশন নির্ধারণ করতে দেয়।
ফলাফল
আগের কোড স্নিপেট নিম্নলিখিত স্ক্রল করা যায় এমন মেনু তৈরি করে:
ডিভাইডার সহ আরও বড় ড্রপ-ডাউন মেনু তৈরি করুন
নিম্নলিখিত স্নিপেট ড্রপ-ডাউন মেনুর আরও উন্নত প্রয়োগ দেখায়। এই স্নিপেটে, মেনু আইটেমে লিডিং ও ট্রেলিং আইকন যোগ করা হয়েছে এবং ডিভাইডার মেনু আইটেমের গ্রুপকে আলাদা করে।
@Composable fun DropdownMenuWithDetails() { var expanded by remember { mutableStateOf(false) } Box( modifier = Modifier .fillMaxWidth() .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(painter = rememberVectorPainter(AppIcons.MoreVert), contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { // First section DropdownMenuItem( text = { Text("Profile") }, leadingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Person), contentDescription = null) }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Settings") }, leadingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Settings), contentDescription = null) }, onClick = { /* Do something... */ } ) HorizontalDivider() // Second section DropdownMenuItem( text = { Text("Send Feedback") }, leadingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Feedback), contentDescription = null) }, trailingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Send), contentDescription = null) }, onClick = { /* Do something... */ } ) HorizontalDivider() // Third section DropdownMenuItem( text = { Text("About") }, leadingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Info), contentDescription = null) }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Help") }, leadingIcon = { Icon(painter = rememberVectorPainter(AppIcons.Help), contentDescription = null) }, trailingIcon = { Icon(painter = rememberVectorPainter(AppIcons.OpenInNew), contentDescription = null) }, onClick = { /* Do something... */ } ) } } }
এই কোড Box-এর মধ্যে DropdownMenu-কে সংজ্ঞায়িত করে।
কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
leadingIconএবংtrailingIconপ্যারামিটারDropdownMenuItem-এর শুরুতে এবং শেষে আইকন যোগ করে।IconButton-এর মাধ্যমে মেনু বড় করা যায়।DropdownMenu-এ একাধিকDropdownMenuItemকম্পোজেবল থাকে, যার প্রতিটি বেছে নেওয়া যায় এমন অ্যাকশনকে দেখায়।HorizontalDividerকম্পোজেবল, মেনু আইটেমের গ্রুপ আলাদা করতে অনুভূমিক লাইন যোগ করে।
ফলাফল
আগের স্নিপেটটি আইকন এবং ডিভাইডার সহ একটি ড্রপ-ডাউন মেনু তৈরি করে:
অতিরিক্ত রিসোর্স
- মেটেরিয়াল ডিজাইন: মেনু