Seçenek menü öğelerini programlı olarak değiştirmek mümkün mü? Biri bana bir örnek verebilir mi lütfen?
Ayrıca, tıklamaları dinlememeleri için belirli öğeleri devre dışı bırakmak istiyorum, bu mümkün mü?
Yanıtlar:
Herkesin menü seçeneklerini dinamik olarak değiştirmesi gerekir:
private Menu menu;
// ...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.menu = menu;
getMenuInflater().inflate(R.menu.options, menu);
return true;
}
// ...
private void hideOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(false);
}
private void showOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(true);
}
private void setOptionTitle(int id, String title)
{
MenuItem item = menu.findItem(id);
item.setTitle(title);
}
private void setOptionIcon(int id, int iconRes)
{
MenuItem item = menu.findItem(id);
item.setIcon(iconRes);
}
item.setVisible(false);
Öğeyi kullandığımda , yalnızca Menüye tıkladığımda gizleniyor. Ben kullanırsanız invalidateOptionsMenu();
yanıt vermeyen öğeyi tıklayın. Karşılaştığım benzer bir konuda bana yardımcı olabilirseniz minnettarım. stackoverflow.com/questions/54756799/…
setVisible
Ayrıca aramanız gereken durumların dokümantasyonu setEnabled(false)
, öğe kısayol aracılığıyla hala çağrılabilir
menu.xml
<item
android:id="@+id/item1"
android:title="your Item">
</item>
java dosyanızı koyun
public void onPrepareOptionsMenu(Menu menu) {
menu.removeItem(R.id.item1);
}
Nikolay'ın dediği gibi, bunu onPrepareOptionsMenu () içinde yapın.
Eylem çubuğundaki menü öğeleri için menüyü geçersiz kılmalısınız.
activity.invalidateOptionsMenu();
Bu, burada daha ayrıntılı olarak açıklanmıştır onPrepareOptionsMenu geçişli menü girişleri olduğunda ActionBar'ı nasıl yenileyebilirim?
Seçenekler menüsünün içeriğini değiştirmem gerekirse, bunu onMenuOpened () sırasında gerçekleştiriyorum. Bu, kullanıcının menüye eriştiği anda çalışma durumunu kontrol etmeme izin veriyor.
public boolean onMenuOpened(int featureid, Menu menu)
{
menu.clear();
if (!editable)
{
MenuItem itemAdd = menu.add(0, REASSIGN, Menu.NONE, context.getString(R.string.reassign));
MenuItem itemMod = menu.add(1, EDIT, Menu.NONE, context.getString(R.string.modify));
MenuItem itemDel = menu.add(2, DELETE, Menu.NONE, context.getString(R.string.delete));
itemAdd.setShortcut('0', 'a');
itemMod.setShortcut('1', 'm');
itemDel.setShortcut('2', 'd');
}
else
{
MenuItem itemSave = menu.add(3, SAVE, Menu.NONE, context.getString(R.string.savechanges));
itemSave.setShortcut('0', 'S');
}
return true;
}
Belirli öğeleri devre dışı bırakmak için:
MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML);
item.setEnabled(false);
item.setVisible(false);
, öğem yalnızca Menünün kendisine (üç nokta) tıkladığımda gizleniyor. Ben kullanırsanız invalidateOptionsMenu();
bazı öğeleri tıkla tepki vermezler. Karşılaştığım benzer bir konuda bana yardımcı olabilirseniz minnettarım. stackoverflow.com/questions/54756799/…
aşağıdaki satırları kullanarak menüdeki değerleri eklemek için yaptım
getActivity().invalidateOptionsMenu();
bu işi benim için bir cazibe gibi dene.
Bu kodu deneyin:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
this.menu=menu;
updateMenuItems(menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.document_list_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
if (item.getItemId() == android.R.id.home) {
onHomeButtonPresssed();
}else if (item.getItemId() == R.id.action_delete) {
useCheckBoxAdapter=false;
deleteDocuments();
} else if (item.getItemId() == R.id.share) {
useCheckBoxAdapter=false;
shareDocuments();
} else if (item.getItemId() == R.id.action_tick) {
useCheckBoxAdapter=true;
onShowCheckboxes();
}
updateMenuItems(menu);
return true;
}
private void updateMenuItems(Menu menu){
if (useCheckBoxAdapter && menu != null) {
menu.findItem(R.id.action_delete).setVisible(true);
menu.findItem(R.id.share).setVisible(true);
menu.findItem(R.id.action_tick).setVisible(false);
} else {
menu.findItem(R.id.action_delete).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
menu.findItem(R.id.action_tick).setVisible(true);
}
invalidateOptionsMenu();
}
invalidateOptionsMenu();
, her zaman görünen öğelerim çalışmayı durduruyor (yani öğeler tıklamaya yanıt vermiyor). Karşılaştığım benzer bir konuda bana yardımcı olabilirseniz minnettarım. stackoverflow.com/questions/54756799/…
Benim yaptığım gibi basit bir şey yapabilirsiniz. Metni, menü öğesine dokunulduğunda gerekene değiştirin. Sesi açıp kapatmam ve ayrıca dokunarak bir eylem gerçekleştirebilmem gerekiyordu. İşte kodum:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.audioOn:
audioOn = !audioOn;
if (audioOn)
item.setTitle("Audio Off");
else
item.setTitle("Audio On");
return true;
case R.id.touchOn:
touchOn = !touchOn;
if (touchOn)
item.setTitle("Touch Off");
else
item.setTitle("Touch On");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
audioOn ve touchOn, kodun diğer bölümlerinde kontrol edilen boole'lerdir. Bu yardımcı olur umarım.
aşağıdaki gibi uygulayarak görevinizi kolayca gerçekleştirebilirsiniz:
private Menu menu;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.drive_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
this.menu = menu;
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_toggle_grid) {
handleMenuOption(id);
return true;
} else if(id == R.id.action_toggle_list){
handleMenuOption(id);
return true;
}
return super.onOptionsItemSelected(item);
}
private void handleMenuOption(int id) {
MenuItem item = menu.findItem(id);
if (id == R.id.action_toggle_grid){
item.setVisible(false);
menu.findItem(R.id.action_toggle_list).setVisible(true);
}else if (id == R.id.action_toggle_list){
item.setVisible(false);
menu.findItem(R.id.action_toggle_grid).setVisible(true);
}
}
BottomBar'ınız olması durumunda:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (mBottomBar.getCurrentTabId() == R.id.tab_more) {
getMenuInflater().inflate(R.menu.more_menu, menu);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.preferences:
startActivity(new Intent(this, PreferenceActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
O zaman aramanız yeterli:
@Override
public void onBottomBarClick(int tabId) {
supportInvalidateOptionsMenu();
}
Araç çubuğuna erişim için Kotlin Kodu SeçeneklerMenu öğeleri programlı olarak & metni / simgeyi değiştir, ..:
1-Menü öğeleri dosyasında menü öğemiz var: menu.xml, bunun için örnek kod:
<?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/balance"
android:title="0"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
2- Sınıfta menü nesnesine erişmek için bir değişken tanımlayın:
var menu: Menu? = null
3- onCreateOptionsMenu'da başlatın:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
this.menu = menu
return true
}
4- Kodunuzun veya eğlencenizin içindeki menü öğelerine erişin:
private fun initialBalanceMenuItemOnToolbar() {
var menuItemBalance = menu?.findItem(R.id.balance)
menuItemBalance?.title = Balance?.toString() ?: 0.toString()
// for change icon : menuWalletBalance?.icon
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.calendar, menu);
if(show_list == true) {
if(!locale.equalsIgnoreCase("sk")) menu.findItem(R.id.action_cyclesn).setVisible(false);
return true;
}
menu
çıkmaya çalışmadan önce ayarlandığından emin olmanız gerektiğidirMenuItem
. Örneğin, buna benzer bir şeyiniz varsaactionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
, sekmeler menüden önce yüklenir, bu nedenlehideOption
/showOption
içinde çağrılmasıonTabSelected
boş bir işaretçi istisnasıyla sonuçlanır.