프로그래밍 방식으로 옵션 메뉴 항목을 변경할 수 있습니까? 누구든지 예를 들어 줄 수 있습니까?
또한 클릭을 듣지 않도록 특정 항목을 비활성화하고 싶습니다. 가능합니까?
답변:
누구나 메뉴의 옵션을 동적으로 변경해야하는 경우 :
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);
하면 메뉴 자체를 클릭 할 때만 항목이 숨겨집니다. invalidateOptionsMenu();
항목을 사용 하면 클릭에 응답하지 않습니다. 제가 직면 한 비슷한 문제에 대해 저를 도울 수 있다면 감사합니다. stackoverflow.com/questions/54756799/…
setVisible
호출해야하는 상태에 대한 문서는 setEnabled(false)
바로 가기를 통해 항목을 계속 호출 할 수 있습니다.
menu.xml
<item
android:id="@+id/item1"
android:title="your Item">
</item>
자바 파일에 넣어
public void onPrepareOptionsMenu(Menu menu) {
menu.removeItem(R.id.item1);
}
Nikolay가 onPrepareOptionsMenu ()에서 그렇게 말한 것처럼.
작업 표시 줄의 메뉴 항목의 경우 다음을 사용하여 메뉴를 무효화해야합니다.
activity.invalidateOptionsMenu();
자세한 내용은 여기에 설명되어 있습니다. onPrepareOptionsMenu가 메뉴 항목을 전환 할 때 ActionBar를 어떻게 새로 고칠 수 있습니까?
옵션 메뉴의 내용을 변경해야하는 경우 onMenuOpened () 중에 수행합니다. 이를 통해 사용자가 메뉴에 액세스하는 순간의 실행 상태를 확인할 수 있습니다.
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;
}
특정 항목을 비활성화하려면 :
MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML);
item.setEnabled(false);
item.setVisible(false);
하면 메뉴 자체 (점 3 개)를 클릭 할 때만 항목이 숨겨집니다. invalidateOptionsMenu();
일부 항목을 사용 하면 클릭에 응답하지 않습니다. 제가 직면 한 비슷한 문제에 대해 저를 도울 수 있다면 감사합니다. stackoverflow.com/questions/54756799/…
이 코드를 시도하십시오.
@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();
항상 표시되는 항목이 작동하지 않습니다 (항목이 클릭에 응답하지 않음을 의미 함). 제가 직면 한 비슷한 문제에 대해 저를 도울 수 있다면 감사합니다. stackoverflow.com/questions/54756799/...
나처럼 간단한 일을 할 수 있습니다. 메뉴 항목을 터치 할 때 필요한 텍스트로 변경하기 만하면됩니다. 나는 소리를 끄고 켜야했고, 터치하여 동작을 수행 할 수있는 능력이 필요했습니다. 내 코드는 다음과 같습니다.
@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 및 touchOn은 코드의 다른 부분에서 확인 된 부울입니다. 도움이 되었기를 바랍니다.
다음과 같이 구현하기 만하면 작업을 수행 할 수 있습니다.
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가있는 경우 :
@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);
}
그런 다음 전화하면됩니다.
@Override
public void onBottomBarClick(int tabId) {
supportInvalidateOptionsMenu();
}
툴바 OptionsMenu 항목에 프로그래밍 방식으로 액세스하고 텍스트 / 아이콘을 변경하기위한 Kotlin 코드 .. :
1- 다음과 같은 메뉴 항목 파일에 메뉴 항목이 있습니다. 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/balance"
android:title="0"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
2- 클래스의 메뉴 개체에 액세스하기위한 변수를 정의합니다.
var menu: Menu? = null
3- onCreateOptionsMenu에서 초기화하십시오.
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- 코드 또는 재미 내 메뉴 항목에 액세스하십시오.
private fun initialBalanceMenuItemOnToolbar() {
var menuItemBalance = menu?.findItem(R.id.balance)
menuItemBalance?.title = Balance?.toString() ?: 0.toString()
// for change icon : menuWalletBalance?.icon
}
menu
할MenuItem
점은 그것을 벗어나 려고 시도하기 전에 설정되어 있는지 확인해야한다는 것입니다. 예를 들어,와 같은 것이있는 경우actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
탭이 메뉴 전에로드되므로hideOption
/showOption
within를 호출onTabSelected
하면 null 포인터 예외가 발생합니다.