我正在试图弄清楚如何在溢出菜单(动作栏右侧)中显示项目的自定义视图,但我似乎无法弄明白。它仍然只显示标题:S。我想做一些像twitter这样的东西,在下拉菜单的第一项中显示图标,标题和副标题。任何人都可以帮助我
Menu.xml中的项目
<item
android:id="@+id/action_dropdown"
android:icon="@drawable/ic_action_overflow"
android:actionProviderClass="efwefwef.com.actionbar.ABDropDown"
android:title=""
android:showAsAction="always">
</item>
actionProvider Class#1
public class ABDropDown extends ActionProvider {
private static final String TAG = "MActionProvider";
private Context context;
public ABDropDown(Context context) {
super(context);
this.context = context;
}
@Override
public View onCreateActionView() {
return null;
}
@Override
public boolean hasSubMenu() {
Log.d(TAG, "hasSubMenu");
return true;
}
@Override
public boolean onPerformDefaultAction() {
Log.d(TAG, "onPerformDefaultAction");
return super.onPerformDefaultAction();
}
@Override
public void onPrepareSubMenu(SubMenu subMenu) {
subMenu.clear();
subMenu.add("Profile").setActionProvider(new ABDropDownProfile(context));
subMenu.add(Menu.NONE, Menu.NONE, 2, "Mezz 2");
}
}
我要显示自定义视图的项目的第二个ActionProvider类
public class ABDropDownProfile extends ActionProvider {
private static final String TAG = "MActionProvider";
private Context context;
public ABDropDownProfile(Context context) {
super(context);
this.context = context;
}
@Override
public View onCreateActionView() {
View view = View.inflate(context, R.layout.actionbar_viewprofile, null);
return view;
}
@Override
public boolean hasSubMenu() {
return false;
}
@Override
public boolean onPerformDefaultAction() {
Log.d(TAG, "onPerformDefaultAction");
return super.onPerformDefaultAction();
}
}
答案 0 :(得分:11)
我在如何列出溢出菜单中的自定义行时遇到了同样的问题。遗憾的是,网上关于自定义操作栏的内容并不多。如果要在“溢出”菜单中列出仅包含图标和标题的项目,则需要在项目中嵌套项目。我是这样做的:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_action_overflow"
android:orderInCategory="100"
android:showAsAction="always">
<menu>
<item
android:id="@+id/add_source"
android:icon="@drawable/add_on"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/add_source"/>
<item
android:id="@+id/channel_setup"
android:icon="@drawable/channelsetup_on"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/channel_setup"/>
</menu>
</item>
<item
android:id="@+id/time"
android:orderInCategory="99"
android:showAsAction="always"
android:title="@string/time_title"/>
<item
android:id="@+id/weather"
android:icon="@drawable/ic_action_cloud"
android:orderInCategory="98"
android:showAsAction="always"
android:title="@string/weather_title"/>
<item
android:id="@+id/search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_search"
android:orderInCategory="97"
android:showAsAction="collapseActionView|always"
android:title="@string/search_title"/>
</menu>
实现这个目标:
这是我的问题的参考:
我希望它对你有所帮助。
答案 1 :(得分:2)
如果您只想在文本后添加一个drawable(红点),您可以使用imageSpan在主文本之后添加drawable,如下所示:
private MenuItem settingsItem;
....
SpannableStringBuilder builder = new SpannableStringBuilder(getString(R.string.settings_menu_name) + " .");
Drawable drawable = getResources().getDrawable(R.drawable.red_dot);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
builder.setSpan(new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE), builder.length()-1, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
settingsItem.setTitle(builder);