Abd*_*aib 5 android android-theme android-optionsmenu android-actionbar android-styles
目前我有一个溢出菜单,其默认宽度为:

我想要的是:

我试过这样改变主题:
<style name="MyWorkspaceDetailTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:popupMenuStyle">@style/MyPopupMenu</item>
</style>
<style name="MyPopupMenu" parent="@android:style/Widget.Holo.ListPopupWindow">
<item name="android:dropDownWidth">30dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但没有取得任何成功.请任何人都可以帮忙.
我正在关注这个[ http://keepsafe.github.io/2014/11/19/building-a-custom-overflow-menu.html]教程,但它没有提到改变宽度的方法
所以我也在寻找相同的答案并一直在寻找,Stackoverflow 上的所有问题都没有得到解答。最后我不得不挖掘developer.google.com来找到一种方法。
http://developer.android.com/reference/android/widget/ListPopupWindow.html
你会发现一个 setContentWidth(int width) 方法实际上完成了我们的工作。
这是答案
//.......... Something on top
popupMenu.show();
// Try to force some horizontal offset
try {
Field fListPopup = menuHelper.getClass().getDeclaredField("mPopup");
fListPopup.setAccessible(true);
Object listPopup = fListPopup.get(menuHelper);
argTypes = new Class[] { int.class };
Class listPopupClass = listPopup.getClass();
// Get the width of the popup window
int width = (Integer) listPopupClass.getDeclaredMethod("getWidth").invoke(listPopup);
// Invoke setHorizontalOffset() with the negative width to move left by that distance
listPopupClass.getDeclaredMethod("setHorizontalOffset", argTypes).invoke(listPopup, -width);
/*********** THIS LINE DOSE OUR WORK and increases the width of OverFlow Menu ******/
listPopupClass.getDeclaredMethod("setContentWidth", argTypes).invoke(listPopup, width+200);
// Invoke show() to update the window's position
listPopupClass.getDeclaredMethod("show").invoke(listPopup);
} catch (Exception e) {
// Again, an exception here indicates a programming error rather than an exceptional condition
// at runtime
Log.w("Soemthing", "Unable to force offset", e);
}
Run Code Online (Sandbox Code Playgroud)
对此==>
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |