动态更改弹出菜单项的字体大小 Android

Posted

技术标签:

【中文标题】动态更改弹出菜单项的字体大小 Android【英文标题】:Change Popup Menu Items font size dynamatically Android 【发布时间】:2016-08-27 04:38:09 【问题描述】:

我正在创建一个具有弹出菜单的 android 应用程序,当单击按钮时它会打开,我想动态增加该弹出菜单中菜单项的文本大小(基于用户输入)。

任何人都可以帮助以编程方式做到这一点吗?

在我的课堂上:

menuButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            //Creating the instance of PopupMenu
            PopupMenu popup = new PopupMenu(getActivity(), menuButton);

            //Inflating the Popup using xml file
            popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
            //registering popup with OnMenuItemClickListener
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() 
                @Override
                public boolean onMenuItemClick(MenuItem item) 
                        switch (item.getItemId()) 
                            case R.id.one:
                                 // Some Stuffs
                            break;
                            case R.id.two:
                                // Some Stuffs
                            break;
                            default:
                            break;
                    
                    return true;
                
            );

我的 xml 文件是 ::

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fav_menu">
<group android:id="@+id/first_section" android:checkableBehavior="none" >
<item
    android:id="@+id/one"
    android:title="@string/sort"
    android:visible="true"

    />
</group>
<group android:id="@+id/first_two" android:checkableBehavior="none">
<item
    android:id="@+id/two"
    android:title="@string/sort"
    android:visible="true"
    />
</group>
</menu>

【问题讨论】:

见this link @Clairvoyant 感谢您的链接,但我想根据用户的输入动态更改大小。 (如果动态意味着它应该以编程方式正确?)。 【参考方案1】:

使用 SpannableString 非常简单:

//### format text of popup-items ###
for(int i=0;i<popup.getMenu().size();i++)
    MenuItem tmpItem = popup.getMenu().getItem(i);
    String tmpText = tmpItem.getTitle().toString();
    SpannableString s = new SpannableString(tmpText);
    s.setSpan(new RelativeSizeSpan(1.4f), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new ForegroundColorSpan(Color.BLUE), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    tmpItem.setTitle(s);

//##################################

【讨论】:

【参考方案2】:

在我的样式文件中:

<style name="menuStyle">
    <item name="android:layoutDirection">rtl</item>
    <item name="android:textColor">@color/onyx</item>
    <item name="android:textSize">15sp</item>
    <item name="android:fontFamily">@font/ge_ss_two_light</item>
</style>

在我的 java 文件中:

Context myContext = new ContextThemeWrapper(context, R.style.menuStyle);
            MenuBuilder menuBuilder = new MenuBuilder(context);
            MenuInflater inflater = new MenuInflater(context);
            inflater.inflate(R.menu.options_menu, menuBuilder);

【讨论】:

【参考方案3】:

您可以通过将此代码添加到 styles.xml 并在清单文件中使用来更改文本大小。

 <style name="AppTheme" parent="AppBaseTheme">
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
    <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
    <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
    <item name="android:textSize">12sp</item>
</style>


<style name="myPopupMenuTextAppearanceSmall" parent="@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small">
<item name="android:textSize">15sp</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large">  
<item name="android:textSize">25sp</item>
</style>

【讨论】:

这不是我想的答案。您能否解释一下如何在 java 类中以编程方式更改它。

以上是关于动态更改弹出菜单项的字体大小 Android的主要内容,如果未能解决你的问题,请参考以下文章

修改右键弹出菜单的字体大小

如何更改弹出菜单的字体大小(MFC、VC6)

如何更改组合框PyQt4中第一项的字体大小

eclipse怎样设置字体大小

如何更改Android Studio的代码字体和颜色

Android 禁止App字体随系统大小而更改