Androidに新しいui要素-BottomNavigationView
XMLファイルにメニューを含めたくありません。バックエンド側からメニューや注文の情報を受け取ります。それらを動的に作成し、onCreate()
メソッドのBottomNavigationView
に設定したいと思います。できますか?
デフォルトでは、BottomNavigationView
は空のメニューから始まります。 getMenu()
メソッドを使用してMenuインスタンスを取得し、次に 上記の応答 のようにメニュー項目を追加できます。例えば、
BottomNavigationView bottomNavigation = findViewById(R.id.bottom_navigation);
Menu menu = bottomNavigation.getMenu();
menu.add(Menu.NONE, MENU_ITEM_ID_ONE, Menu.NONE, getString(R.string.str_menu_one))
.setIcon(R.drawable.ic_action_one);
下部のナビゲーションビューで動的オプションを使用する簡単な方法は、次のようなさまざまなメニュー項目を使用することです。
switch (userType){
case UserTypes.A:
bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_a);
break;
case UserTypes.B:
bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_b);
break;
case UserTypes.C:
bottomNavigationView.inflateMenu(R.menu.menu_bottom_navigation_c);
break;
}
メニュー項目の動的構築の例を次に示します。メインアクティビティでは、2つのレイアウトがあります。バックエンドから独自のレイアウトを取得し、menu.addを使用して動的にメニュー項目を作成できます
src: http://www.mobiledevguide.com/2014/01/dynamically-create-menu-items-in-Android.html
public class MainActivity extends Activity {
private Button mButtonOne,mButtonTwo;
private static final int MENU_ITEM_ID_ONE =1;
private static final int MENU_ITEM_ID_TWO =2;
private static final int MENU_ITEM_ID_THREE =3;
private static final int MENU_ITEM_ID_FOUR =4;
private static final int MENU_ITEM_ID_FIVE =5;
private static final int MENU_ITEM_ID_SIX =6;
private int mMenuSet = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonOne=(Button) findViewById(R.id.buttonSetOne);
mButtonTwo=(Button) findViewById(R.id.buttonSetTwo);
mButtonOne.setOnClickListener(clickListener);
mButtonTwo.setOnClickListener(clickListener);
}
OnClickListener clickListener=new OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId()==R.id.buttonSetOne) {
mMenuSet=1;
} else if (v.getId()==R.id.buttonSetTwo){
mMenuSet=2;
}
invalidateOptionsMenu();
/*
* if you are using ActionBarSherlock use this.supportInvalidateOptionsMenu();
* if you are using ActionBarCompat use invalidateOptionsMenu (Activity activity) method
* */
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
if(mMenuSet==1){
menu.add(Menu.NONE, MENU_ITEM_ID_ONE, Menu.NONE,getString(R.string.str_menu_one)).setIcon(R.drawable.ic_action_one).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, MENU_ITEM_ID_TWO, Menu.NONE,getString(R.string.str_menu_two)).setIcon(R.drawable.ic_action_two).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, MENU_ITEM_ID_THREE, Menu.NONE,getString(R.string.str_menu_three)).setIcon(R.drawable.ic_action_three);
}else if(mMenuSet==2){
menu.add(Menu.NONE, MENU_ITEM_ID_FOUR, Menu.NONE,getString(R.string.str_menu_four)).setIcon(R.drawable.ic_action_four).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, MENU_ITEM_ID_FIVE, Menu.NONE,getString(R.string.str_menu_five)).setIcon(R.drawable.ic_action_five).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, MENU_ITEM_ID_SIX, Menu.NONE,getString(R.string.str_menu_six)).setIcon(R.drawable.ic_action_six);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_ID_ONE:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_one), Toast.LENGTH_SHORT).show();
break;
case MENU_ITEM_ID_TWO:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_two), Toast.LENGTH_SHORT).show();
break;
case MENU_ITEM_ID_THREE:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_three), Toast.LENGTH_SHORT).show();
break;
case MENU_ITEM_ID_FOUR:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_four), Toast.LENGTH_SHORT).show();
break;
case MENU_ITEM_ID_FIVE:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_five), Toast.LENGTH_SHORT).show();
break;
case MENU_ITEM_ID_SIX:
Toast.makeText(this, "Click on "+ getString(R.string.str_menu_six), Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings:
Toast.makeText(this, "Click on "+ getString(R.string.action_settings), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}}