android - 如何组织菜单项
问题描述
我开始学习 Android 的东西,我想知道如何组织/重新排列工具栏上菜单中的不同项目(例如:如何将它们推到工具栏的中心,如何决定有多少空间我想在不同的项目之间,等等..)。
现在,我有一个如下所示的 menu_main.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/miCompose"
android:icon="@drawable/ic_calendar"
app:showAsAction="always"
android:title="Calendar" >
</item>
<item
android:id="@+id/miProfile"
android:icon="@drawable/ic_dining"
app:showAsAction="always"
android:title="Dining">
</item>
</menu>
这样我的项目就会以这种方式显示在我的工具栏上:
http://zupimages.net/viewer.php?id=19/13/pr82.png
但我想找到一种方法让它们成为我工具栏的中心。有人可以帮我吗?我现在好像什么都找不到...
解决方案
所以忘记所有关于 menu.xml 并开始考虑自定义菜单项
您也可以以编程方式添加您的个人菜单项,例如:
popup.getMenu().add(groupID,itemID,itemOrder,itemTitle);
'itemOrder' 从字面上看是一个整数,您要为其添加项目的订单
对于您需要的每个菜单项:
ID
标题
图标(可选)
所以。创建一个为您提供这些特征的类,如下所示:
public class MyMenu {
public static Integer Count(){
return 4;
}
public static String title(int pick){
String[] strings = new String[]{
"title1",
"title2",
"title3",
"title4"
};
return strings[pick];
}
public static int iconDrawable(int pick){
int[] drawables = new int[]{
R.drawable.icon1,
R.drawable.icon2,
R.drawable.icon3,
R.drawable.icon4
};
return drawables[pick];
}
}
现在使用这个类来创建你的菜单,如下所示:
PopupMenu popup = new PopupMenu(getActivity(), yourTargetView);
int count = MyMenu.Count();
for (int i = 0; i < count; i++) {
popup.getMenu().add(1,
i,
i,
MyMenu.title(i))
.setIcon(MyMenu.iconDrawable(i))
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
popup.setOnMenuItemClickListener(
new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// So Something on Click
return true;
}
});
popup.show();
现在你可以用这样的课程做任何你想做的事情。您还可以对标题或 ID 或订单使用简单的数组列表
ArrayList<String> titles = new new ArrayList<>();
for (int i = 0; i < count; i++) {
titles.add(_whatever);
}
推荐阅读
- java - Java程序为VB应用程序生成的文件的编码问题
- python - 更新 macOS 后无法执行 mkvirtualenv
- mongoose - 在猫鼬模式中为数组中的嵌套对象设置默认值
- objective-c - 当通过 pod 添加时,为什么“Mobilisten 框架”适用于 swift 项目而不适用于 Objective-c 项目
- cuda - CUSPARSE 三对角求解器`cusparseDgtsv` 很慢
- selenium - 是否有可能等到特定课程消失?
- dart - 如何将泛型类型作为参数传递给 Flutter 中的 Future
- c# - 单击警报后如何刷新到主页
- javascript - 如何在 console.dir("string"+object) 中使用控制台
- python-3.x - 如何删除列表列表中不唯一的所有项目?