Android में टूलबार पर मेनू कैसे सेट करें


95

मैं ToolBarइसके बजाय का उपयोग करना चाहते हैं ActionBar, लेकिन मुझे टूलबार में मेनू नहीं दिखाएगा !!! मुझे सेट मेनू चाहिए जैसे कि ताज़ा करें या बटन सेट करनाActionBar

यहां छवि विवरण दर्ज करें

Toolbar.xml कोड:

<?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"/>

MainPage.java कोड:

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/…
चोल

3
और Google से बेहतर है: developer.android.com/training/appbar/setting-up.html
Chol

2
यह वही है जो मुझे याद आ रहा था toolbar.inflateMenu (R.menu.main_manu);
skryshtafovych


का उपयोग करके एक नया एप्लिकेशन बनाने का प्रयास करें Android Studioऔर इसे देखें। `टूलबार 'एक स्वतंत्र संस्था नहीं होनी चाहिए।
अभिनव सक्सेना

जवाबों:


153

बस अपने मेनपेज में इस तरह onCreateOptionsMenu को ओवरराइड करें। जावा

@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;
}

66

सेटसुपोर्टएशनबार (टूलबार) का उपयोग न करें

मुझे नहीं पता क्यों लेकिन यह मेरे लिए काम करता है।

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;
        }
    });

इस उत्तर के 'क्यों' भाग को अद्यतन करेगा जब मुझे उचित स्पष्टीकरण मिलेगा।
वैसे भी मदद करने के लिए खुश :) शांति।


5
आप मुझे जवाब देते हैं, लेकिन यह नहीं बताता कि मुझे इसका उपयोग क्यों नहीं करना चाहिए।
रिचर्ड रूट

5
आपको यह समझाना चाहिए कि सेटस्पोर्टऑनएशनबार (टूलबार) का उपयोग करने के लिए क्यों न केवल यह कहा जाए कि आपके लिए क्या काम करता है।
विंचियस विक्टर

1
यह केवल एक चीज है जो मेरे लिए काम करती है। मैं एक कस्टम टूलबार के साथ Xamarin.Android का उपयोग कर रहा हूं।
वाशिंगटन ए। रामोस

1
मैं इसके बारे में अधिक पढ़ूंगा और उत्तर @AbhinavSaxena को अपडेट करूंगा। गुड कॉल
रोहित सिंह 10

कृपया main_activity_layout.xml पोस्ट करें। यह काम करता है और एक उत्कृष्ट समाधान है, लेकिन आपको जवाब पूरा करना होगा। बाकी मैंने अपने जवाब में किया है।
अभिनव सक्सेना

51

भविष्य के आगंतुकों के संदर्भ के रूप में यहां एक पूर्ण उत्तर दिया गया है। मैं आमतौर पर एक समर्थन टूलबार का उपयोग करता हूं, लेकिन यह वैसे भी काम करता है।

यहां छवि विवरण दर्ज करें

1. एक मेनू xml बनाओ

यह होने जा रहा है res/menu/main_menu

  • resफ़ोल्डर पर राइट क्लिक करें और नया> Android संसाधन फ़ाइल चुनें
  • 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;
}

3. हैंडल मेनू क्लिक

अपनी गतिविधि में भी, निम्न विधि जोड़ें:

@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
केवल दो कोड लाइनों के बजाय सभी आवश्यक घटकों को एक साथ दिखाने के लिए धन्यवाद।
Big_Chair

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

हालांकि मैं इस जवाब से सहमत हूं, क्योंकि इसमें कोड की कम लाइनें हैं और यह काम करता है:

Android में टूलबार पर मेनू कैसे सेट करें

मेरा सुझाव हमेशा एंड्रॉइड स्टूडियो विज़ार्ड का उपयोग करके किसी भी परियोजना को शुरू करना होगा। उस कोड में आपको कुछ स्टाइल मिलेंगे: -

<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);

तथा:

Android में टूलबार पर मेनू कैसे सेट करें

काम करेगा।

हैप्पी कोडिंग :-)


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>

1

मेरे मामले में, मैं एक CollapsingToolbarLayout के साथ AppBarLayout का उपयोग कर रहा हूं और मेनू को हमेशा स्क्रीन से बाहर स्क्रॉल किया जा रहा था, मैंने एंड्रॉइड को स्विच करके अपनी समस्या को हल किया: मेनू के XML में टूलबार की आईडी पर कार्रवाई। मुझे आशा है कि यह उसी स्थिति में लोगों की मदद कर सकता है!

activity_main.xml

<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>

0

इसके लिए सरल फिक्स Res / मेनू में सेट 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);
    }

रेस / लेआउट / drawer_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_drawer"
        android:title="@string/app_name"
        android:icon="@drawable/ic_menu_black_24dp"
        app:showAsAction="always"/>

</menu>

toolbar.xml

<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);


0

XML में एक लाइन अंदर जोड़ें <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

आप अभी भी setSupportActionBar (टूलबार) का उपयोग करते हुए Toolbar.inflateMenu का उपयोग करके दिए गए उत्तर का उपयोग कर सकते हैं ।

मेरे पास एक ऐसा परिदृश्य था जहां मुझे टूलबार सेटअप कार्यक्षमता को गतिविधि के बाहर एक अलग वर्ग में ले जाना था जो कि onCreateOptionsMenu की घटना के बारे में नहीं जानता था।

इसलिए, इसे लागू करने के लिए, मुझे केवल टूलबार के इन्तज़ार के लिए इन्तेर्नमेनु को कॉल करने से पहले तैयार होने की प्रतीक्षा करनी थी:

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

बहुत साफ नहीं माना जा सकता है, लेकिन अभी भी काम हो जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.