programing

메뉴 항목을 작업 표시줄에 숨기려면 어떻게 해야 합니까?

mailnote 2023. 9. 8. 21:40
반응형

메뉴 항목을 작업 표시줄에 숨기려면 어떻게 해야 합니까?

메뉴 항목이 있는 액션 바가 있습니다.그 메뉴 항목을 숨기거나 표시하려면 어떻게 해야 합니까?

이것이 제가 하려는 일입니다.

MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();

겟어어MenuItem항목을 당을기출,출기g당을,lsetVisible가시거리를 조정한 후에 전화를 걸게 됩니다.invalidateOptionsMenu()ActionBar 메뉴가 그에 따라 조정되도록 작업을 수행합니다.

업데이트: AMenuItem레이아웃의 일부인 일반 보기가 아닙니다.뭔가 특별하고 전혀 다른 거죠코드가 반환됩니다.null위해서item같습니다.대신 필요한 작업은 다음과 같습니다.

MenuItem item = menu.findItem(R.id.addAction);

에 전화를: 먼저 전화를 보세요. 전화를 걸어 보세요. 전화를 걸어 보세요.invalidateOptionsMenu()고 안에로으로onCreateOptionsMenu(Menu)(MenuItem한를다을해에을해 ).menu.findItem())와 통화합니다.setVisible()그 위에

이 질문의 부록을 찾았습니다.

하고 에 의 을 하려면 에서 를 하여 를 을 만 하려는 만 을 하려는 를 invalidateOptionsMenu()에는을길수다다수redne길s에을는에 숨깁니다.onCreateOptionsMenu(...)방법.

//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == HIDE_MENU)
    {
        for (int i = 0; i < menu.size(); i++)
            menu.getItem(i).setVisible(false);
    }
}

예를 들어 모든 항목을 숨겼습니다.

네.

  1. 플래그/조건을 설정할 수 있습니다.
  2. 전화 invalidateOptionsMenu()선택사항을 숨기고 싶을 때 말입니다.이것이 전화할 것입니다.onCreateOptionsMenu().
  3. onCreateOptionsMenu()과 같이 를/하고 과 으로 하거나 하거나 으로 를 하고
MenuItem item = menu.findItem(R.id.menu_Done);

if (flag/condition)) {
  item.setVisible(false); 
} else { }

저는 조금 더 맥락이 있는 답을 찾고 있었습니다.이제 알아냈으니 그 답을 덧붙이겠습니다.

메뉴 xml에서 기본적으로 단추 숨기기

으로 은 과 에 의해 설정된 대로 숨겨집니다.android:visible="false".

enter image description here

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

    <!-- hide share button by default -->
    <item
        android:id="@+id/menu_action_share"
        android:icon="@drawable/ic_share_white_24dp"
        android:visible="false"     
        android:title="Share"
        app:showAsAction="always"/>

    <item
        android:id="@+id/menu_action_settings"
        android:icon="@drawable/ic_settings_white_24dp"
        android:title="Setting"
        app:showAsAction="ifRoom"/>

</menu>

코드내표시버튼

그러나 공유 버튼은 어떤 조건에 따라 선택적으로 표시될 수 있습니다.

enter image description here

주 활동.java

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    MenuItem shareItem = menu.findItem(R.id.menu_action_share);

    // show the button when some condition is true
    if (someCondition) {        
        shareItem.setVisible(true);
    }

    return true;
}

참고 항목

  • App Bar 설정(Android 문서를 통해 App/Action Bar를 설정하는 데 도움이

이렇게 부를 수 있습니다.

MenuItem item = menu.findItem(R.id.my_item);
item.setVisible(false);

업데이트:

코드가 반환되지 않는지 확인합니다.null위해서item그렇지 않으면 응용프로그램이 중단될 수 있습니다.

저한테는 안 통했어요나는 명시적으로 사용해야만 했습니다.onPrepareOptionsMenu항목을 보이지 않게 설정합니다.

을 합니다.onCreateOptionsMenu고를 .onPrepareOptionsMenu가시거리 등을 변경합니다.

먼저 다음과 같이 메뉴 레이아웃 파일에서 메뉴 항목 가시성을 false로 설정합니다.

<?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:visible="false"
        android:id="@+id/action_do_something"
        android:title="@string/txt_do_something"
        app:showAsAction="always|withText"
        android:icon="@drawable/ic_done"/>
</menu>

그런 다음 메뉴를 부풀린 후 onCreateOptionsMenu()에서 메뉴 항목의 가시성을 false로 설정하면 됩니다.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(menu,R.menu.menu);
    MenuItem item = menu.findItem(R.id.menuItemId);
    if (item != null){
        item.setVisible(false);
    }
}

시도해 보기:

MenuItem myitem = menu.findItem(R.id.my_item);
myitem.setVisible(false);

활동과 단편 모두에서 효과가 있었습니다.

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (menu.findItem(R.id.action_messages) != null)
        menu.findItem(R.id.action_messages).setVisible(false);
}

P1r4nh4 답변은 정상적으로 작동합니다. 부울 플래그를 사용하여 단순화했습니다.

public int mState = 0; //at the top of the code
//where you want to trigger the hide action
mState = 1; // to hide or mState = 0; to show
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == 1) //1 is true, 0 is false
    {
        //hide only option 2
            menu.getItem(2).setVisible(false);
    }
}

Android Developer Official 사이트에 따르면 OnCreateOptionMenu(메뉴 메뉴)는 메뉴 항목이나 아이콘, 가시성 변경에 권장되지 않습니다.Runtime 에서 등.

시스템이 CreateOptionsMenu()를 호출한 후에는 사용자가 채우는 메뉴의 인스턴스가 유지되며 어떠한 이유로 메뉴가 무효화되지 않는 한 CreateOptionsMenu()를 다시 호출하지 않습니다.그러나 CreateOptionsMenu()에서는 초기 메뉴 상태를 만들 때만 사용하고 활동 수명 주기 동안에는 변경하지 않아야 합니다.

활동 수명 주기 동안 발생한 이벤트를 기준으로 옵션 메뉴를 수정하려면 onPrepareOptionsMenu() 메서드에서 수정할 수 있습니다.이 메서드는 메뉴 개체를 현재 있는 그대로 전달하므로 항목 추가, 제거 또는 사용 안 함과 같이 수정할 수 있습니다. (조각은 onPrepareOptionsMenu() 콜백도 제공합니다.) --Android Developer 공식 사이트 --

권장하는 대로 옵션에서 사용할 수 있습니다.ItemSelected(MenuItem 항목) 메서드가 사용자 입력을 추적합니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.edit) {
        Intent intent = new Intent(this, ExampleActivity.class);
        intent.putExtra(BUNDLE_KEY, mConnection);
        startActivityForResult(intent, PICK_CHANGE_REQUEST);
        return true;
    } else if (id == R.id.delete) {
        showDialog(this);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

실행 시 메뉴 항목을 변경해야 하는 경우, 옵션 메뉴 준비(메뉴 메뉴)에서 해당 항목을 변경할 수 있습니다.

@Override
public boolean onPrepareOptionsMenu(Menu menu){

    if (Utils.checkNetworkStatus(ExampleActivity.this)) {
        menu.findItem(R.id.edit).setVisible(true);
        menu.findItem(R.id.delete).setVisible(true);
    }else {
        menu.findItem(R.id.edit).setVisible(false);
        menu.findItem(R.id.delete).setVisible(false);
    }
    return true;
} 

명령 하나로 메뉴의 모든 항목을 숨기는 가장 좋은 방법은 메뉴 xml에서 "group"을 사용하는 것입니다.오버플로 메뉴에 포함될 모든 메뉴 항목을 동일한 그룹 안에 추가하기만 하면 됩니다.

이 예제에는 항상 표시되는 두 가지 메뉴 항목(일반 항목 및 검색)과 세 가지 오버플로 항목이 있습니다.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/someItemNotToHide1"
        android:title="ITEM"
        app:showAsAction="always" />

    <item
        android:id="@+id/someItemNotToHide2"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>

    <group android:id="@+id/overFlowItemsToHide">
    <item android:id="@+id/someID" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID2" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID3" 
    android:orderInCategory="1" app:showAsAction="never" />
    </group>
</menu>

그런 다음 활동(CreateOptionsMenu에서 선호)에서 명령 setGroupVisible을 사용하여 모든 메뉴 항목 가시성을 false 또는 true로 설정합니다.

public boolean onCreateOptionsMenu(Menu menu) {
   menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}

이 명령을 작업의 다른 곳에서 사용하려면 메뉴 클래스를 local에 저장해야 하며, OptionsMenu를 만들기 전에 실행할 수 있으므로 항상 null인지 확인해야 합니다.

Menu menu;

public boolean onCreateOptionsMenu(Menu menu) {
       this.menu = menu;

}

public void hideMenus() {
       if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible       
}

을 사용할 수 .toolbar.getMenu().clear();을 한 위해든뉴을한에다에다한든oel뉴을t .

https://stackoverflow.com/a/21215280/466363 - Look Alterno와 Sufian이 응답함

  • ActivityCompat.invalidateOptionsMenu()는 PrepareOptionsMenu()에서 콜백하지 않고 직접 메뉴를 업데이트합니다.
  • CreateOptionsMenu()에서도 여러 곳에서 My someMethod()가 호출되므로 mMenu != null을 확인해야 합니다.
  • API 8을 사용해서 작동해야 합니다.

.

private Menu mMenu;
   @Override
   public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
       inflater.inflate(R.menu.track_fragment, menu);
       mMenu = menu;
       }
   ...
   private void someMethod() {
   ...
       if (mMenu != null) {
          MenuItem item = mMenu.findItem(R.id.new_track);
          if (item != null) {
               item.setVisible(false);
               ActivityCompat.invalidateOptionsMenu(this.getActivity());
           }
       }
   ...
   }
  • ActivityCompat.invalidateOptionsMenu()는 PrepareOptionsMenu()에서 콜백하지 않고 직접 메뉴를 업데이트합니다.

  • CreateOptionsMenu()에서도 여러 곳에서 My someMethod()가 호출되므로 mMenu != null을 확인해야 합니다.

  • API 8을 사용해서 작동해야 합니다.

메뉴에서 모든 항목의 Visibility(가시성)를 설정하면 앱바 메뉴 또는 오버플로 메뉴가 자동으로 Hide(숨김)됩니다.

private Menu menu_change_language;

...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    menu_change_language.findItem(R.id.menu_change_language)
           .setVisible(true);

    return super.onCreateOptionsMenu(menu);
}

다른 조각으로 이동하기 전에 다음 코드를 사용합니다.

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

값을 변수로 설정하고 invalidateOptionsMenu()를 호출합니다;

예를들면

    selectedid=arg2;
            invalidateOptionsMenu();


 public boolean onPrepareOptionsMenu(Menu menu) {

    if(selectedid==1){
        menu.findItem(R.id.action_setting).setVisible(false);
        menu.findItem(R.id.action_s2).setVisible(false);
        menu.findItem(R.id.action_s3).setVisible(false);
    }
    else{
        if(selectedid==2){
            menu.findItem(R.id.action_search).setVisible(false);
            menu.findItem(R.id.action_s4).setVisible(false);
            menu.findItem(R.id.action_s5).setVisible(false);
        }
    }
    return super.onPrepareOptionsMenu(menu);
}

위의 답변과 같이 모든 것을 수행했지만 메뉴 항목이 표시된 경우 고유 리소스를 참조하는지 확인합니다.예를 들어 옵션 생성 메뉴 또는 옵션 준비 메뉴

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuOpen = menu.findItem(R.id.menu_open);
    menuOpen.setVisible(false);
}

Ctrl+R.id .menu_open을 클릭하여 하나의 메뉴 파일에만 존재하는지 확인합니다.이 리소스가 이미 아무 곳에서나 사용되고 작업에 로드된 경우 해당 리소스를 숨기려고 합니다.

Android kotlin, 프로그램식으로 동작 표시줄에서 메뉴 항목을 숨기거나 표시를 설정합니다.

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    val inflater = menuInflater
    inflater.inflate(R.menu.main_menu, menu)
    val method = menu.findItem(R.id.menu_method)
    method.isVisible = false //if want to show set true
    return super.onCreateOptionsMenu(menu)
}

Appcompat 라이브러리를 사용하는 경우:Activity가 Activity를 하위 분류하는 경우 지원을 호출할 수 있습니다.잘못된 옵션 메뉴()

여기서 보기: https://stackoverflow.com/a/19649877/1562524

메뉴에 멤버 변수를 사용하고 CreateOptionsMenu()에서 초기화한 후 옵션 메뉴를 무효화하지 않고 setVisible()만 사용하는 것이 더 나은 방법이 될 것 같습니다.

이 코드는 내게 통했습니다.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu,menu);
    if (Application.sharedPreferences.getInt("type",1) == 2)
    {
        menuItem = menu.findItem(R.id.menu_travel_orders);
        menuItem.setVisible(false);
    }
    return super.onCreateOptionsMenu(menu);
}

이 접근 방식은 다음과 같이 효과적이었습니다.

private  Menu thismenu;

if (condition)
{
   if(thismenu != null)
   {
       thismenu.findItem(R.id.menu_save).setVisible(true);
       Toast.makeText(ProfileActivity.this, 
    ""+thismenu.findItem(R.id.menu_save).getTitle(),
                Toast.LENGTH_SHORT).show();
   }else
   {
       thismenu.findItem(R.id.menu_save).setVisible(false);
   }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.profile_menu, menu);
   thismenu = menu;

   return true;
}

범위에 대한 액세스 권한이 없는 활동에서 메뉴 항목에 액세스하려고 합니다.보기가 사용자가 호출하는 활동이나 레이아웃과 바인딩되어 있지 않으므로 메뉴 항목을 찾기 위한 호출은 null을 반환합니다.

메뉴 항목은 "내비게이션 바"와 같은 항목으로 바인딩되며, 이 항목은 해당 활동과 바인딩됩니다.

활동()에서 해당 보기를 초기화한 다음 해당 보기가 있는 메뉴 항목에 액세스합니다.

Navigation navView;
navView = findViewById(R.id.navigationView);

MenuItem item = navView.getMenu().findItem(R.id.item_hosting);
item.setVisible(false);

사용하다invalidateOptionsMenu()

부르려고onPrepareOptionsMenu(menu: Menu?)

CreateOptionsMenu()에서는 초기 메뉴 상태를 만들 때만 사용하고 활동 수명 주기 동안에는 변경하지 않아야 합니다.

이벤트가 발생하고 메뉴 업데이트를 수행하려면 무효 옵션 메뉴()를 호출하여 시스템이 옵션 메뉴 준비()를 호출하도록 요청해야 합니다.

https://developer.android.com/guide/topics/ui/menus

제게 도움이 됩니다. 도움이 일이 당신에게 도움이 되길 바랍니다

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.my_menu_setting, menu);

    for (int i = 0; i < menu.size(); i++){
        if(menu.getItem(i).getItemId() == R.id.this_item_i_want_to_hide){
            menu.getItem(i).setVisible(false);
        }
    }

    return true;
}

메뉴 옵션 만들기 일반적인 방법으로 아래 코드를 참조하고 클래스 내의 전역 참조를 메뉴에 추가합니다.

Menu mMenu;  // global reference within the class
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_tcktdetails, menu);
    mMenu=menu;  // assign the menu to the new menu item you just created 
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_cancelticket) {
        cancelTicket();

        return true;
    }

    return super.onOptionsItemSelected(item);
}

이제 버튼이나 함수 내에서 이 코드를 실행하여 메뉴를 전환할 수 있습니다.

if(mMenu != null) {
                mMenu.findItem(R.id.action_cancelticket).setVisible(false);
            }

언급URL : https://stackoverflow.com/questions/10692755/how-do-i-hide-a-menu-item-in-the-actionbar

반응형