অ্যান্ড্রয়েড কাস্টম ড্রপডাউন / পপআপ মেনু


127

আমি কীভাবে একটি বোতামে অ্যাঙ্করিত কাস্টম ড্রপডাউন / পপআপ মেনু করব?

আমার এটি পপআপ মেনু (একটি ভিউতে অ্যাঙ্করড) এর মতো কাজ করা দরকার এবং আমি মেনু থেকে কোনও আইটেম ক্লিক করলে কিছু করি।

আমি কোডের মাধ্যমে মেনুতে আইটেমগুলি কীভাবে যুক্ত করব, মেনুটির উচ্চতা রেখেছি এবং 5 টিরও বেশি আইটেম থাকলে এটি স্ক্রোলযোগ্য করে তুলব। আমার কোনও চিত্র যুক্ত করার দরকার নেই, কেবল পাঠ্য।

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


315

আপডেট : কোটলিন সহ অ্যান্ড্রয়েডে একটি পপআপ মেনু তৈরি করতে আমার উত্তরটি এখানে উল্লেখ করুন

জাভা সহ অ্যান্ড্রয়েডে একটি পপআপ মেনু তৈরি করতে:

একটি লেআউট ফাইল তৈরি activity_main.xmlঅধীনে res/layoutডিরেক্টরির যা শুধুমাত্র একটি বাটন রয়েছে।

ফাইলের নাম: activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context=".MainActivity" >  

    <Button  
        android:id="@+id/button1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentLeft="true"  
        android:layout_alignParentTop="true"  
        android:layout_marginLeft="62dp"  
        android:layout_marginTop="50dp"  
        android:text="Show Popup" />  

</RelativeLayout>  

একটি ফাইল তৈরি করুন popup_menu.xmlঅধীনে res/menuডিরেক্টরি

এটিতে তিনটি আইটেম রয়েছে যা নীচে দেখানো হয়েছে।

ফাইলের নাম: poupup_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >  

    <item  
        android:id="@+id/one"  
        android:title="One"/>  

    <item  
        android:id="@+id/two"  
        android:title="Two"/>  

    <item  
        android:id="@+id/three"  
        android:title="Three"/>  

</menu>  

মেইনঅ্যাক্টিভিটি ক্লাস যা বোতাম ক্লিকের উপর পপআপ মেনু প্রদর্শন করে।

ফাইলের নাম: MainActivity.java

public class MainActivity extends Activity {  
    private Button button1;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(MainActivity.this, button1);
                //Inflating the Popup using xml file
                popup.getMenuInflater()
                    .inflate(R.menu.popup_menu, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        Toast.makeText(
                            MainActivity.this,
                            "You Clicked : " + item.getTitle(),
                            Toast.LENGTH_SHORT
                        ).show();
                        return true;
                    }
                });

                popup.show(); //showing popup menu
            }
        }); //closing the setOnClickListener method
    }
}

প্রোগ্রামগতভাবে যুক্ত করতে:

PopupMenu menu = new PopupMenu(this, view);

menu.getMenu().add("One");
menu.getMenu().add("Two");
menu.getMenu().add("Three");

menu.show();

প্রোগ্রামযুক্তভাবে মেনু তৈরি করার জন্য এই লিঙ্কটি অনুসরণ করুন ।


আরে ধন্যবাদ !! আমি যদি মেনুতে আরও আইটেম যুক্ত করতে চাই তবে ?. আমি কি কোড দিয়ে এটি করতে পারি?
stanete

স্বাগতম .. হ্যাঁ আপনি পপআপ_মেনু.এক্সএমএলগুলিতে আরও আইটেম যুক্ত করতে পারেন
শৈলেন্দ্র

3
ঠিক আছে আমি কীভাবে আইটেম যুক্ত করব তা খুঁজে পেয়েছি: মেন্যু.মেটমেনু ()। যুক্ত ("আইটেম"); তবে আমি কীভাবে মেনুটি কাস্টমাইজ করব?
stanete

1
এখন এটি কম সংস্করণেও যেমন 3.0 এর নীচে ব্যবহার করা যেতে পারে (মধুচক্র) ভি 7 কম্প্যাট সমর্থন লাইব্রেরি ব্যবহার করে ..
AndroidMech

1
<আইটেম অ্যান্ড্রয়েড: আইডি = "@ + আইডি / গুগল_প্লাস" অ্যান্ড্রয়েড: শিরোনাম = "@ স্ট্রিং / মেনু_গুগল_প্লাস" অ্যান্ড্রয়েড: আইকন = "@ অঙ্কনযোগ্য / অ্যাড_বি_জিপি" অ্যান্ড্রয়েড: showAsAction = "ifRoom | withText" /> এইভাবে আমি যুক্ত করেছি, তবে আমি পাঠ্য সহ চিত্রটি দেখতে পাচ্ছি না
মি। জি

8

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি আরও একটি উত্তর পেয়েছি যা আমার পক্ষে আরও ভাল কাজ করেছে এবং এটি কোনও উত্তরে উপস্থিত হবে বলে মনে হয় না।

একটি লেআউট এক্সএমএল তৈরি করুন:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="5dip"
    android:paddingBottom="5dip"
    android:paddingStart="10dip"
    android:paddingEnd="10dip">

<ImageView
    android:id="@+id/shoe_select_icon"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_gravity="center_vertical"
    android:scaleType="fitXY" />

<TextView
    android:id="@+id/shoe_select_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textSize="20sp"
    android:paddingStart="10dp"
    android:paddingEnd="10dp"/>

</LinearLayout>

লিস্টপপআপ উইন্ডো এবং সামগ্রী সহ একটি মানচিত্র তৈরি করুন:

ListPopupWindow popupWindow;
List<HashMap<String, Object>> data = new ArrayList<>();
HashMap<String, Object> map = new HashMap<>();
    map.put(TITLE, getString(R.string.left));
    map.put(ICON, R.drawable.left);
    data.add(map);
    map = new HashMap<>();
    map.put(TITLE, getString(R.string.right));
    map.put(ICON, R.drawable.right);
    data.add(map);

তারপরে ক্লিকের পরে, এই ফাংশনটি ব্যবহার করে মেনুটি প্রদর্শন করুন:

private void showListMenu(final View anchor) {
    popupWindow = new ListPopupWindow(this);

    ListAdapter adapter = new SimpleAdapter(
            this,
            data,
            R.layout.shoe_select,
            new String[] {TITLE, ICON}, // These are just the keys that the data uses (constant strings)
            new int[] {R.id.shoe_select_text, R.id.shoe_select_icon}); // The view ids to map the data to

    popupWindow.setAnchorView(anchor);
    popupWindow.setAdapter(adapter);
    popupWindow.setWidth(400);
    popupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch (position){
                case 0:
                    devicesAdapter.setSelectedLeftPosition(devicesList.getChildAdapterPosition(anchor));
                    break;
                case 1:
                    devicesAdapter.setSelectedRightPosition(devicesList.getChildAdapterPosition(anchor));
                    break;
                default:
                    break;
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    devicesAdapter.notifyDataSetChanged();
                }
            });
            popupWindow.dismiss();
        }
    });
    popupWindow.show();
}

6

কোটলিন ওয়ে

fun showPopupMenu(view: View) {
    PopupMenu(view.context, view).apply {
                menuInflater.inflate(R.menu.popup_men, menu)
                setOnMenuItemClickListener { item ->
                    Toast.makeText(view.context, "You Clicked : " + item.title, Toast.LENGTH_SHORT).show()
                    true
                }
            }.show()
}

আপডেট: উপরের কোডে, প্রয়োগ ফাংশনটি রিটার্ন দেয় thisযা প্রয়োজন হয় না, তাই আমরা ব্যবহার করতে runপারি যা কোন কিছুই প্রত্যাবর্তন করে না এবং এটি আরও সরল করে তুলতে আমরা শোপপআপেনু পদ্ধতির কোঁকড়ানো ধনুর্বন্ধনীগুলিও সরাতে পারি।

এমনকি সহজ:

fun showPopupMenu(view: View) = PopupMenu(view.context, view).run {
            menuInflater.inflate(R.menu.popup_men, menu)
            setOnMenuItemClickListener { item ->
                Toast.makeText(view.context, "You Clicked : ${item.title}", Toast.LENGTH_SHORT).show()
                true
            }
            show()
        }

3

প্রথমে, "পুনরায়" ফোল্ডারে "মেনু" নামে একটি ফোল্ডার তৈরি করুন।

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"/>
    <item
        android:id="@+id/add"
        android:icon="@android:drawable/ic_menu_add"
        android:title="Add"/>
    <item
        android:id="@+id/edit"
        android:icon="@android:drawable/ic_menu_edit"
        android:title="Edit">
        <menu>
            <item
                android:id="@+id/share"
                android:icon="@android:drawable/ic_menu_share"
                android:title="Share"/>
        </menu>
    </item>

</menu>

তারপরে, আপনার ক্রিয়াকলাপ শ্রেণি তৈরি করুন:

public class PopupMenu1 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popup_menu_1);
    }

    public void onPopupButtonClick(View button) {
        PopupMenu popup = new PopupMenu(this, button);
        popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());

        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(PopupMenu1.this,
                        "Clicked popup menu item " + item.getTitle(),
                        Toast.LENGTH_SHORT).show();
                return true;
            }
        });

        popup.show();
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.