需求是这样的,项目里用了 Android Support v7 的 Toolbar:
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
这样就可以直接用 Toolbar 里面的 OverflowButton 作为 Menu 的扩展:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
现在需要对 OverflowButton 的弹出菜单做样式修改,已经修改的差不多了,发现弹出菜单的 minWidth 是定死的,由于菜单里的字比较少,弄一个很宽的菜单感觉很别扭. 一些代码 support v7 的源码:
android.support.v7.view.menu.MenuAdapter:
public class MenuAdapter extends BaseAdapter {
static final int ITEM_LAYOUT = R.layout.abc_popup_menu_item_layout;
.....
}
这里的 R.layout.abc_popup_menu_item_layout 就是弹出的 popuwindow 里 Listview 的 item 的 layout
再看看具体布局:
<android.support.v7.view.menu.ListMenuItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:minWidth="196dip"
style="@style/RtlOverlay.Widget.AppCompat.PopupMenuItem">
.........
这里竟然固定将 android:minWidth 固定设置成了 196dip
顿时一万头草泥马在心里路过....
刚开始想用反射的方式将 ITEM_LAYOUT 改变成其它的值,但是 static final 修饰的没办法修改
不到万不得以不想自己重写 OverflowButton 的逻辑,时间问题.
请问大家有什么好的方法,比如通过 android studio 编译器将这个资源文件替换掉之类的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.