我想在ActionBar中另外创建一个自定义溢出菜单项,如下图所示:
但是如果ActionBar中的空间很小,我不希望Item1和Item2作为溢出进入设置项目,而是进入"我的溢出项目"。
这是我的菜单xml代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:icon="@android:drawable/ic_menu_agenda"
android:title="Item1"
android:showAsAction="ifRoom|withText" />
<item
android:icon="@android:drawable/ic_menu_add"
android:title="Item2"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/pick_action_provider"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:showAsAction="always"
android:title="Overflow" >
<menu>
<item android:id="@+id/action_sort_size"
android:icon="@android:drawable/ic_menu_camera"
android:title="Item3" />
<item android:id="@+id/action_sort_alpha"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:title="Item4" />
</menu>
</item>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/></menu>
答案 0 :(得分:7)
这会对你有所帮助。我已将此编码为溢出菜单
在menu / main.xml文件中
<item
android:id="@+id/overflow"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/ic_overflow"
android:title="">
<menu>
<item
android:id="@+id/facebook"
android:title="Facebook"/>
<item
android:id="@+id/Twitter"
android:title="Twitter"/>
<item
android:id="@+id/Youtube"
android:title="Youtube"/>
</menu>
</item>
这是你的java代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar actions click
super.onOptionsItemSelected(item);
if(item.getItemId() == R.id.facebook){
Toast.makeText(Getstarted.this, "Option pressed= facebook",Toast.LENGTH_LONG).show();
}
else if(item.getItemId() == R.id.Youtube){
Toast.makeText(Getstarted.this, "Option pressed= youtube",Toast.LENGTH_LONG).show();
}
else if(item.getItemId() == R.id.Twitter){
Toast.makeText(Getstarted.this, "Option pressed= twitter",Toast.LENGTH_LONG).show();
}
return true;
}
答案 1 :(得分:0)
请参阅以下链接
http://www.codeproject.com/Articles/173121/Android-Menus-My-Way
http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown
我建议您使用actionbarsherlock创建自定义溢出菜单
请参阅此答案,了解如何使用actionbar sherlock创建溢出菜单项
ActionbarSherlock does not include "overflow" section of Action Bar (on Android 2.1)
答案 2 :(得分:0)
您最有可能必须删除菜单中的设置项,即@ + id / action_settings。
如果你仍然想要它在那里,只需删除它&#34; showAsActionAttribute&#34;或者换成
android:showAsAction="always"
对于Item1和Item2:
将他们的showAsAction
属性添加为android:showAsAction="ifRoom|withText"
希望有所帮助。
答案 3 :(得分:0)
实现您想要实现的目标的最佳方式是为自定义ActionBar
充气。
执行以下步骤。
1)创建XML RelativeLayout
2)在XML
中包含一个菜单项和标签 3)通过ActionBar
班级给行动栏充气。
4)就是你做完了!!
警告:不要忘记使用兼容性库!!它有一些依赖关系,以便上述工作。
答案 4 :(得分:0)
点击操作栏中的项目
PopupMenu popup = new PopupMenu(MainActivity.this, v);
popup.getMenuInflater().inflate(
R.mymenu xml , popup.getMenu());
mymenu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:icon="@android:drawable/ic_menu_agenda"
android:title="Item1"
android:showAsAction="ifRoom" />
<item
android:icon="@android:drawable/ic_menu_add"
android:title="Item2"
android:showAsAction="ifRoom" />
<item android:id="@+id/pick_action_provider"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:showAsAction="ifRoom"
android:title="Overflow" >
<menu>
<item android:id="@+id/action_sort_size"
android:showAsAction="ifRoom|withText"
android:icon="@android:drawable/ic_menu_camera"
android:title="Item3" />
<item android:id="@+id/action_sort_alpha"
android:showAsAction="ifRoom|withText"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:title="Item4" />
</menu>
</item>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action_settings"/></menu>
答案 5 :(得分:0)
尝试使用
<item .... <any_damn_name>:showAsAction="ifRoom|withText" />
不要忘记添加
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:<any_damn_name>="http://schemas.android.com/apk/res-auto"
尝试为片段和全局设置单独的菜单(Global.xml菜单文件中的设置)
确保以正确的顺序对两者进行充气。
答案 6 :(得分:0)
menu.xml
:
<item android:id="@+id/game"
android:icon="@drawable/menu_addnew"
android:title="game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/menu_addnew"
android:title="help" />
abc.class
文件进行了以下更改:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.game:
Game();
return true;
case R.id.help:
Help();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
请参阅Menus文档。
答案 7 :(得分:0)
为溢出菜单创建样式并传入内容描述
<style name="Widget.ActionButton.Overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:contentDescription">@string/accessibility_overflow</item>
</style>
<style name="Your.Theme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
</style>
调用 ViewGroup.findViewsWithText 并传入您的内容说明。有点像这样:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The content description used to locate the overflow button
final String overflowDesc = getString(R.string.accessibility_overflow);
// The top-level window
final ViewGroup decor = (ViewGroup) getWindow().getDecorView();
// Wait a moment to ensure the overflow button can be located
decor.postDelayed(new Runnable() {
@Override
public void run() {
// The List that contains the matching views
final ArrayList<View> outViews = new ArrayList<>();
// Traverse the view-hierarchy and locate the overflow button
decor.findViewsWithText(outViews, overflowDesc,
View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
// Guard against any errors
if (outViews.isEmpty()) {
return;
}
// Do something with the view
final ImageButton overflow = (ImageButton) outViews.get(0);
overflow.setImageResource(R.drawable.ic_action_overflow);
}
}, 1000);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Add a dummy item to the overflow menu
menu.add("Overflow");
return super.onCreateOptionsMenu(menu);
}
仅在API级别14中添加了View.findViewsWithText 。所以请尝试自己做一个方法,如下所示:
public static void findViewsWithText(List<View> outViews, ViewGroup parent, String targetDescription) {
if (parent == null || TextUtils.isEmpty(targetDescription)) {
return;
}
final int count = parent.getChildCount();
for (int i = 0; i < count; i++) {
final View child = parent.getChildAt(i);
final CharSequence desc = child.getContentDescription();
if (!TextUtils.isEmpty(desc) && targetDescription.equals(desc.toString())) {
outViews.add(child);
} else if (child instanceof ViewGroup && child.getVisibility() == View.VISIBLE) {
findViewsWithText(outViews, (ViewGroup) child, targetDescription);
}
}
}
这不是经过测试的代码。因此,如果您实施时出现任何问题,请告诉我们。