2017-11-28 22 views
2

아래에 표시된 코드를 사용하여 옵션 메뉴를 설정하는 간단한 활동이 있습니다. 내가 겪고있는 문제는 확장 및 searchview 축소 후 app:showAsAction="ifRoom" 함께 메뉴 항목을 경우에도 도구 모음에 여유가 나타나지 않습니다. 반면에 app:showAsAction="never" 인 메뉴 항목이 나타납니다.다른 옵션 메뉴 항목은 확장 된 searchview가 축소 된 후에 표시되지 않습니다.

public class SimpleActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_simple); 
     Toolbar toolbar = findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", 
       Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_simple_activity, menu); 
     MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
     final MenuItem filterMenuItem = menu.findItem(R.id.action_filter); 
     final MenuItem sortMenuItem = menu.findItem(R.id.action_sort); 
     final MenuItem printAllMenuItem = 
     menu.findItem(R.id.action_print_all); 

     searchMenuItem.setOnActionExpandListener(new 
     MenuItem.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       filterMenuItem.setVisible(false); 
       sortMenuItem.setVisible(false); 
       printAllMenuItem.setVisible(false); 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       filterMenuItem.setVisible(true); 
       sortMenuItem.setVisible(true); 
       printAllMenuItem.setVisible(true); 
       return true; 
      } 
     }); 
     return true; 
    } 
} 

내가 그것을 어떻게 menu_simple_activity.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/action_search" 
     android:icon="@drawable/ic_search_white_24dp" 
     android:title="@string/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" /> 
    <item 
     android:id="@+id/action_filter" 
     android:icon="@drawable/ic_filter_list_white_24dp" 
     android:title="@string/action_filter" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_sort" 
     android:icon="@drawable/ic_sort_white_24dp" 
     android:title="@string/action_sort" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_print_all" 
     android:icon="@drawable/ic_print_white_24dp" 
     android:title="@string/action_print_all" 
     app:showAsAction="never" /> 
</menu> 

SimpleActivity.java 수정합니까?

+0

[invalidateOptionsMenu()] (https://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu())를 호출 해 보았습니까? – LordRaydenMK

+0

다른 항목의 표시를 활성화 한 후에 invalidateOptionsMenu()를 호출하면 작동합니다. 감사합니다. –

+0

답변을 작성하여 허용으로 표시 할 수 있습니다. – LordRaydenMK

답변

1

항목을 표시로 설정 한 후에 invalidateOptionsMenu()으로 전화해야합니다. 문서에서

는 :

옵션 메뉴가 변경되었음을 선언합니다, 그래서 다시해야한다. onCreateOptionsMenu (Menu) 메서드는 다음에 이 표시 될 때 호출됩니다.