অ্যান্ড্রয়েডে টুলবারে মেনু কীভাবে সেট করবেন


99

আমি ToolBarপরিবর্তে ব্যবহার করতে চাই ActionBar, কিন্তু সরঞ্জামদণ্ডে আমাকে মেনু প্রদর্শন করবেন না !!! আমি রিফ্রেশ বা সেটিং বোতামগুলির মতো মেনু সেট করতে চাই ActionBar

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

টুলবার.এক্সএমএল কোড:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    app:navigationContentDescription="@string/abc_action_bar_up_description"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:title="Main Page"
    android:gravity="center"/>

মেইনপেজ.জভা কোড:

public class MainPage extends AppCompatActivity {
    private Toolbar toolbar;

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

        toolbar = (Toolbar) findViewById(R.id.main_toolbar);
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("Main Page");
        }
        toolbar.setSubtitle("Test Subtitle");
        toolbar.inflateMenu(R.menu.main_manu);
    }
}

main_menu.xML কোড:

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

    <item
        android:id="@+id/menu_main_setting"
        android:icon="@drawable/ic_settings"
        android:orderInCategory="100"
        app:showAsAction="always"
        android:actionLayout="@layout/toolbar"
        android:title="Setting" />

    <item
        android:id="@+id/menu_main_setting2"
        android:icon="@drawable/ic_settings"
        android:orderInCategory="200"
        app:showAsAction="always"
        android:actionLayout="@layout/toolbar"
        android:title="Setting" />

</menu>

কীভাবে এই সমস্যাটি ঠিক করবেন এবং মেনুতে কীভাবে দেখবেন Toolbar? সমস্ত প্রিয় <3 ধন্যবাদ


4
আপনি এখানে চেক করতে পারেন: stackoverflow.com/questions/31231609/…
চোল

4
এবং গুগল থেকে আরও উন্নত
চোল

4
আমি যা পেয়েছিলাম তা হ'ল টুলবার.inflateMenu (R.menu.main_manu);
skryshtafovych


Android Studioএটি ব্যবহার করে একটি নতুন অ্যাপ্লিকেশন তৈরি করার চেষ্টা করুন । `টুলবার 'স্বতন্ত্র সত্তা হওয়া উচিত নয়।
অভিনব সাক্সেনা

উত্তর:


158

শুধু ওভাররাইড onCreateOptionsMenu আপনার MainPage.java ভালো

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}

69

সেটসপোর্টঅ্যাকশনবার (সরঞ্জামদণ্ড) ব্যবহার করবেন না

আমি জানি না কেন তবে এটি আমার পক্ষে কাজ করে।

toolbar = (Toolbar) findViewById(R.id.main_toolbar);
toolbar.setSubtitle("Test Subtitle");
toolbar.inflateMenu(R.menu.main_manu);

মেনু আইটেম জন্য ক্লিক করুন

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {

            if(item.getItemId()==R.id.item1)
            {
                // do something
            }
            else if(item.getItemId()== R.id.filter)
            {
               // do something
            }
            else{
               // do something
            }

            return false;
        }
    });

যখন আমি একটি সঠিক ব্যাখ্যা পাই তখন এই উত্তরটির 'কেন' অংশ আপডেট করবে।
যাইহোক সাহায্য করার জন্য খুশি :) শান্তি।


4
আপনি আমাকে জবাব দিয়েছিলেন, তবে কেন এটি ব্যবহার করা উচিত নয় তা ব্যাখ্যা করে না।
রিচার্ড রাউট 15 'এ

4
আপনার জন্য কী কাজ করে কেবল এটির পরিবর্তে সেটসপোর্টএকশনবার (সরঞ্জামদণ্ড) কেন ব্যবহার করবেন না তা আপনার ব্যাখ্যা করা উচিত।
ভিনিসিয়াস ভিক্টর

4
এটিই আমার পক্ষে কাজ করেছে। আমি কাস্টম টুলবারের সাথে জ্যামারিন.এন্ড্রয়েড ব্যবহার করছি।
ওয়াশিংটন এ। রামোস

4
আমি এটি সম্পর্কে আরও পড়তে হবে এবং উত্তর উত্তরব্যাক্সেসেনা আপডেট করব। ভাল কল
রোহিত সিং

এছাড়াও main_activity_layout.xml পোস্ট করুন। এটি কাজ করে এবং একটি অসামান্য সমাধান, তবে আপনাকে উত্তরটি সম্পূর্ণ করতে হবে। বিশ্রাম আমি আমার উত্তরে করেছি।
অভিনব সাক্সেনা

53

ভবিষ্যতের দর্শনার্থীদের রেফারেন্স হিসাবে এখানে একটি পূর্ণ উত্তর দেওয়া আছে। আমি সাধারণত একটি সমর্থন সরঞ্জামদণ্ড ব্যবহার করি তবে এটি উভয় উপায়ে কাজ করে।

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

1. একটি মেনু এক্সএমএল করুন

এটি হতে চলেছে res/menu/main_menu

  • resফোল্ডারে ডান ক্লিক করুন এবং নতুন> অ্যান্ড্রয়েড রিসোর্স ফাইল নির্বাচন করুন
  • main_menuফাইল নামের জন্য টাইপ করুন ।
  • রিসোর্স ধরণের জন্য মেনু চয়ন করুন।

নীচের সামগ্রীটিতে স্টার্টার হিসাবে আটকান।

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_add"
        android:icon="@drawable/ic_add"
        app:showAsAction="ifRoom"
        android:title="Add">
    </item>
    <item
        android:id="@+id/action_settings"
        app:showAsAction="never"
        android:title="Settings">
    </item>
</menu>

আইকনটি তৈরি করতে আপনি ডান ক্লিক করতে পারেন resএবং নতুন চিত্র সম্পদটি চয়ন করতে পারেন ic_add

2. মেনু স্ফীত

আপনার ক্রিয়াকলাপে নিম্নলিখিত পদ্ধতিটি যুক্ত করুন।

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}

৩. মেনু ক্লিকগুলি পরিচালনা করুন

আপনার ক্রিয়াকলাপেও নিম্নলিখিত পদ্ধতিটি যুক্ত করুন:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.action_add:
            addSomething();
            return true;
        case R.id.action_settings:
            startSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

আরও পড়া


4
কেবলমাত্র দুটি কোড লাইনের পরিবর্তে সমস্ত প্রয়োজনীয় উপাদান একসাথে দেখানোর জন্য ধন্যবাদ।
বিগ_চায়ের

44

আপনার ক্রিয়াকলাপে আপনাকে এই কোডটি ওভাররাইড করতে হবে:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu, this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main2, menu);
    return true;
}

এবং আপনার সরঞ্জামদণ্ডটি এটির মতো সেট করুন:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

7

মেনুর প্রতিটি বিকল্পে কিছু ক্রিয়া বাস্তবায়নের জন্য আপনার এটিও দরকার।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_help:
            Toast.makeText(this, "This is teh option help", Toast.LENGTH_LONG).show();
            break;
        default:
            break;
    }
    return true;
}

3

যদিও আমি এই উত্তরটির সাথে একমত, কারণ এতে কোডের কম লাইন রয়েছে এবং এটি কার্যকর:

অ্যান্ড্রয়েডে টুলবারে মেনু কীভাবে সেট করবেন

আমার পরামর্শ সর্বদা অ্যান্ড্রয়েড স্টুডিও উইজার্ড ব্যবহার করে যে কোনও প্রকল্প শুরু করা উচিত। সেই কোডটিতে আপনি কয়েকটি স্টাইল পাবেন: -

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

এবং ব্যবহারটি হ'ল:

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout> 

no action bar themeঘোষিত হওয়ার কারণে styles.xml, এটি এর ক্ষেত্রে প্রয়োগ করা Main Activityহয় AndroidManifest.xml, কোনও ব্যতিক্রম নেই, সুতরাং আপনাকে এটি সেখানে পরীক্ষা করতে হবে।

<activity android:name=".MainActivity" android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  1. Toolbarএকটি স্বাধীন সত্তা এটা সবসময় একটি শিশু দৃশ্য নয়, AppBarLayoutআবার এর সন্তান CoordinatorLayout
  2. মেনু তৈরির কোডটি প্রথম দিন থেকেই স্ট্যান্ডার্ড কোড, যা সমস্ত উত্তরগুলিতে বার বার পুনরাবৃত্তি হয়, বিশেষত চিহ্নিতটি, তবে কেউ বুঝতে পারল না পার্থক্য কী।

উভয়:

Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);

এবং:

অ্যান্ড্রয়েডে টুলবারে মেনু কীভাবে সেট করবেন

কাজ করবে.

শুভ কোডিং :-)


2

আপনার ক্রিয়াকলাপে এই পদ্ধতিটি ওভাররাইড করুন।

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

এটি নীচে আপনার মেনু স্ফীত করা হবে:

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

        <item
            android:id="@+id/menu_main_setting"
            android:icon="@drawable/ic_settings"
            android:orderInCategory="100"
            app:showAsAction="always"
            android:actionLayout="@layout/toolbar"
            android:title="Setting" />

        <item
            android:id="@+id/menu_main_setting2"
            android:icon="@drawable/ic_settings"
            android:orderInCategory="200"
            app:showAsAction="always"
            android:actionLayout="@layout/toolbar"
            android:title="Setting" />

    </menu>

2

আপনি এখনও সেটসুপারপোর্টঅ্যাকশনবার (সরঞ্জামদণ্ড) ব্যবহার করার সময়ও সরঞ্জামদন্ড.ফ্লেটমেনু ব্যবহার করে প্রদত্ত উত্তরটি ব্যবহার করতে পারেন ।

আমার এমন একটি দৃশ্য ছিল যেখানে আমাকে ক্রিয়াকলাপগুলি মেনুতে ইভেন্টটির নিজেই জানা ছিল না এমন ক্রিয়াকলাপের বাইরে সরঞ্জামদণ্ডের সেটআপ কার্যকারিতাটি একটি পৃথক শ্রেণিতে স্থানান্তরিত করতে হয়েছিল।

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

toolbar.post {
    toolbar.inflateMenu(R.menu.my_menu)
}

খুব পরিষ্কার বিবেচিত না হলেও তবুও কাজটি হয়ে যায়।


এটা আমার জন্য কাজ করে। ধন্যবাদ!
রাকঝা

1

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

কার্যকলাপ_মাইন.এক্সএমএল

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.MainScreenActivity"
    android:screenOrientation="portrait">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:elevation="0dp"
        android:theme="@style/AppTheme.AppBarOverlay">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingBar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="exitUntilCollapsed|scroll"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="48dp"
            >
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:elevation="0dp"
                app:popupTheme="@style/AppTheme.PopupOverlay"
                app:layout_collapseMode="pin"/>
        </android.support.design.widget.CollapsingToolbarLayout>


    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

main_menu.xML

<?xml version="1.0" encoding="utf-8"?> <menu
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/logoutMenu"
        android:orderInCategory="100"
        android:title="@string/log_out"
        app:showAsAction="never"
        android:actionLayout="@id/toolbar"/>
    <item
        android:id="@+id/sortMenu"
        android:orderInCategory="100"
        android:title="@string/sort"
        app:showAsAction="never"/> </menu>

1

এক্সএমএলে ভিতরে একটি লাইন যুক্ত করুন <Toolbar/>

<com.google.android.material.appbar.MaterialToolbar
app:menu="@menu/main_menu"/>

জাভা ফাইলে, এটি প্রতিস্থাপন করুন:

 setSupportActionBar(toolbar);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("Main Page");
        }

এর সাথে:

toolbar.setTitle("Main Page")

0

এই সহজ ফিক্স অস্ত যাবার সময় showAsActionথেকে alwaysmenu.xmlমাঝামাঝি ইন / মেনু

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

    <item
        android:id="@+id/add_alarm"
        android:icon="@drawable/ic_action_name"
        android:orderInCategory="100"
        android:title="Add"
        app:showAsAction="always"
        android:visible="true"/>

</menu>

0
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar;        
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
  }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_drawer,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_drawer){
           drawerLayout.openDrawer(GravityCompat.END);
            if (drawerLayout.isDrawerOpen(GravityCompat.END)) {
                drawerLayout.closeDrawer(GravityCompat.END);
            } else {
                drawerLayout.openDrawer(GravityCompat.END);
            }
        }
        return super.onOptionsItemSelected(item);
    }

রেজ / লেআউট / ড্রয়ার_মেনু

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

    <item
        android:id="@+id/action_drawer"
        android:title="@string/app_name"
        android:icon="@drawable/ic_menu_black_24dp"
        app:showAsAction="always"/>

</menu>

টুলবার.এক্সএমএল

<com.google.android.material.appbar.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    app:titleTextColor="@android:color/white"
    app:titleTextAppearance="@style/TextAppearance.Widget.Event.Toolbar.Title">

     <TextView
         android:id="@+id/toolbar_title"
         android:layout_gravity="center"
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:text="@string/app_name"
         android:textColor="@android:color/white"
         style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" />

</androidx.appcompat.widget.Toolbar>


0
private Toolbar toolbar;

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

    toolbar = (Toolbar) findViewById(R.id.my_toolbar);
    *// here is where you set it to show on the toolbar*
    setSupportActionBar(toolbar);
}

ঠিক আছে, আপনাকে সমর্থন অ্যাকশন বার সেটসপোর্টএ্যাকশনবার () সেট করতে হবে; এবং আপনার ভেরিয়েবল পাস, যেমন:setSupportActionBar(toolbar);

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