2017-03-15 50 views
1

我有兩種不同的菜單佈局。我想在點擊按鈕時在運行時更改充氣菜單。如何以編程方式更改Android中的菜單

最初菜單設置爲@menu/navigation。點擊按鈕時,我希望它更改爲@menu/navigation2

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="th.ac.sd.sdschoolas.MainActivity"> 

    <FrameLayout 
     android:id="@+id/content_main" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <WebView 
      android:id="@+id/web_main" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

     <ImageView 
      android:id="@+id/imageView" 
      android:layout_width="152dp" 
      android:layout_height="158dp" 
      android:layout_x="23dp" 
      android:layout_y="46dp" 
      app:srcCompat="@mipmap/logo" 
      android:padding="20dp"/> 
    </FrameLayout> 

    <android.support.design.widget.BottomNavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:background="?android:attr/windowBackground" 
     app:menu="@menu/navigation" /> 

</LinearLayout> 

菜單/ navigation.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/nav1" 
     android:icon="@mipmap/homeicon" 
     android:title="@string/title_home" /> 

    <item 
     android:id="@+id/nav2" 
     android:icon="@mipmap/newsicon01" 
     android:title="@string/title_news" /> 

    <item 
     android:id="@+id/nav3" 
     android:icon="@drawable/ic_calendar_page_empty" 
     android:title="@string/title_cal" /> 

    <item 
     android:id="@+id/nav4" 
     android:icon="@drawable/ic_chat_bubbles" 
     android:title="@string/title_sms" /> 

    <item 
     android:id="@+id/nav5" 
     android:icon="@mipmap/more" 
     android:title="@string/title_more" /> 

</menu> 

菜單/ navigation2.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/nav1" 
     android:icon="@mipmap/seticon" 
     android:title="@string/title_setting" /> 

    <item 
     android:id="@+id/nav2" 
     android:icon="@mipmap/moreicom" 
     android:title="@string/title_more2" /> 

</menu> 
+0

不要垃圾郵件與無關標籤 –

回答

5

通過覆蓋onCreateOptionsMenu方法可以填充菜單。

您可以使用內部狀態來選擇要充氣的菜單,例如,

private int menuToChoose = R.menu.navigation; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(menuToChoose, menu); 
    return true; 
} 

然後,在你OnClickListener您需要更改狀態,並呼籲invalidateOptionsMenu(),例如

public void onClick(View v) { 
    menuToChoose = R.menu.navigation2; 

    invalidateOptionsMenu(); 
} 
1

您可以使用菜單中的添加()API動態添加菜單

menu.add(0, 0, 0, "Option1").setShortcut('3', 'c');

你可以得到菜單對象API

public boolean onCreateOptionsMenu(Menu menu) 
1

使用下面的programmetically套餐代碼...

navigation.inflateMenu(R.menu.name_menu); 
+0

我試過但沒有工作。它說:「不能解決方法inflateMenu(?)」 – TacticalBacon

+0

請在開發者控制檯看bottomnavigationview它有膨脹的方法可能是你忘了一些東西或做一些錯誤的pelase讓它檢查... –

相關問題