onCreateOptionsMenu() और MenuItem.setVisible() का उपयोग करके ActionBar मेनू आइटम को डायनामिकली दिखाने/छिपाने का तरीका।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट में टॉगल बटन
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<ToggleButton
android:id="@+id/btnMenuItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOn="Show Share"
android:textOff="Hide Share" />
</LinearLayout>
चरण 3: मेनू रिसोर्स
res/menu/menuitem.xml (menu फोल्डर बनाएं):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_action_share"
android:icon="@drawable/ic_share_black_24dp"
android:title="Share"
app:showAsAction="ifRoom" />
</menu>
चरण 4: MainActivity
src/MainActivity.java:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
ToggleButton toggleButton;
Menu menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleButton = findViewById(R.id.btnMenuItem);
toggleButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (menu != null) {
MenuItem item = menu.findItem(R.id.menu_action_share);
item.setVisible(isChecked);
item.setEnabled(isChecked);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menuitem, menu);
this.menu = menu;
MenuItem item = menu.findItem(R.id.menu_action_share);
if (item != null) item.setVisible(true);
return true;
}
}
चरण 5: मैनिफेस्ट
मानक मैनिफेस्ट।
मुख्य विधियां
| विधि | उपयोग |
|---|---|
menu.findItem(id) | मेनू आइटम प्राप्त करें |
item.setVisible(boolean) | दिखाएं/छिपाएं |
item.setEnabled(boolean) | सक्षम/अक्षम करें |
item.setTitle() | शीर्षक बदलें |
item.setIcon() | आइकन बदलें |
invalidateOptionsMenu() | मेनू रीफ्रेश करें (onCreateOptionsMenu फिर कॉल होता है) |
उन्नत: सशर्त दृश्यता
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_action_share);
item.setVisible(someCondition);
return super.onPrepareOptionsMenu(menu);
}
Toolbar (AppCompat) के साथ
Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); // फिर समान onCreateOptionsMenu उपयोग करें