【问题标题】:Android: change width of overflow menuAndroid:更改溢出菜单的宽度
【发布时间】:2013-07-17 07:15:15
【问题描述】:

目前我有一个默认宽度的溢出菜单:

我想要的是:

我试过这样改变主题:

<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>

但没有成功。请任何人帮忙。

【问题讨论】:

    标签: android android-actionbar android-theme android-styles android-optionsmenu


    【解决方案1】:

    我正在关注这个[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);
            }
    

    至此 == >

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2017-02-21
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2014-03-29
      • 2023-03-31
      相关资源
      最近更新 更多