根据需求我们定义了三个menu,但是在代码中如何获取定义好的menu到自定义的布局中呢?
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:icon="@drawable/home_discover_selected"
android:title="@string/menu_1" />
<item
android:icon="@drawable/home_project_selected"
android:title="@string/menu_2" />
<item
android:icon="@drawable/home_investor_selected"
android:title="@string/menu_3" />
</menu>
创建一个item类,承装这个menu个体
class MenuItem {
protected int iconResource;
private String title;
private Drawable imageResource;
private int id;
public MenuItem(String title, Drawable imageResource) {
this.title = title;
this.imageResource = imageResource;
}
protected Drawable getIcon(Context context) {
if (this.iconResource != 0) {
return ContextCompat.getDrawable(context, this.iconResource);
} else {
return this.imageResource;
}
}
}
接下来就获取menu里面的icon和text了
public MenuItem[] setItemsFromMenu(Activity activity,@MenuRes int menuRes) {
PopupMenu popupMenu = new PopupMenu(activity, null);
Menu menu = popupMenu.getMenu();
activity.getMenuInflater().inflate(menuRes, menu);
int menuSize = menu.size();
MenuItem[] tabs = new MenuItem[menuSize];
for (int i = 0; i < menuSize; i++) {
MenuItem item = menu.getItem(i);
MenuItem tab = new MenuItem(String.valueOf(item.getTitle()),item.getIcon());
tabs[i] = tab;
}
return tabs;
}
我们已经把menu定义的icon和text放到MenuItem[]里面了,这样就能根据自己的需求获取相关的icon和txt放到自己定义的layout了,举个例子
LinearLayout items = new LinearLayout(context);
for (int i = 0; i < MenuItems.length(); i++) {
MenuItem item = MenuItems[i];
final View view = inflater.inflate(R.layout.bottom_navigation, this, false);
ImageView icon = (ImageView) view.findViewById(R.id.item_icon);
TextView title = (TextView) view.findViewById(R.id.item_title);
icon.setImageDrawable(item.getIcon(context));
title.setText(item.getTitle());
items.addView(view);
}