如何为工具栏上的溢出菜单中的菜单项设置字体

2024-05-09

我想更改项目的默认字体溢出菜单并设置自定义字体.

我尝试添加一个工厂LayoutInflater并在onCreateView()方法我改变了TextView的字体。但这没有用。这是代码(在 onCreateOptionsMenu 内),

getLayoutInflater().cloneInContext(this).setFactory(new LayoutInflater.Factory() {
        @Override
        public View onCreateView(String name, Context context, AttributeSet attrs) {

            if (name.contains("com.android.internal.view.menu.IconMenuItemView")) {
                try {
                    LayoutInflater li = LayoutInflater.from(context);
                    final View view = li.createView(name, null, attrs);
                    new Handler().post(new Runnable() {
                        @Override
                        public void run() {
                            ((TextView) view).setTypeface("custom_typeface");
                        }
                    });
                    return view;

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    });

实际上,当我调试代码时,它从未到达 onCreateView() 内部。

那么如何解决这个问题呢?

Thanks.


这就是我解决这个问题的方法

步骤1:创建一个全局Factory变量并在onCreate()中初始化,如下所示,

  mFactory = new LayoutInflater.Factory() {
        @Override
        public View onCreateView(String name, final Context context, AttributeSet attrs) {
                try {
                    LayoutInflater li = LayoutInflater.from(context);
                    final View view = li.createView(name, null, attrs);

                    new Handler().post(new Runnable() {
                        @Override
                        public void run() {
                            ((TextView) view.findViewById(R.id.title)).setTypeface("custom_typeface");
                        }
                    });

                    return view;

                } catch (Exception e) {
                    e.printStackTrace();
                }
            return null;
        }
    };

第 2 步:覆盖AppCompatActivity 中的 onCreateView() 方法。 请记住,有 2 个具有不同签名的 oncreate() 方法。

public View onCreateView (String name, Context context, AttributeSet attrs) - 适用于 pre HONEYCOMB 应用程序

public View onCreateView (View Parent, String name, Context context, AttributeSet attrs) - 在 API 11 中添加。

onCreateView的实现如下,

@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {

    if(name.contains("android.support.v7.view.menu.ListMenuItemView")) {
        LayoutInflater li = LayoutInflater.from(context);
        View view = null;
        try {
            view = li.createView(name, null, attrs);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if (view != null) {
            if(mFactory != null) {
                view = mFactory.onCreateView(name,context,attrs);
            }
            return view;
        }
    }
    return super.onCreateView(name, context, attrs);
}

Note:

(1)我用过android.support.v7.view.menu.ListMenuItemView http://androidxref.com/6.0.1_r10/xref/frameworks/support/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java代替com.android.internal.view.menu.IconMenuItemView http://androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/com/android/internal/view/menu/IconMenuItemView.java因为我正在使用 AppCompat 支持库。

(2)由于我已经在 onCreate() 中初始化了一个 Factory 对象,因此我从 onCreateOptionsMenu() 中删除了代码段(发布在我的问题中)。所以它只包含这部分,

 getMenuInflater().inflate(R.menu.my_menu, menu); 
 return true;

参考 :

如何设置选项菜单的字体? https://stackoverflow.com/a/11376591/1134412

使用 LayoutInflaterCompat.setFactory 的 Android 菜单项字体 https://stackoverflow.com/questions/31319161/android-menu-item-font-using-layoutinflatercompat-setfactory

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为工具栏上的溢出菜单中的菜单项设置字体 的相关文章

随机推荐

  • 如何获取调用函数的“this”值?

    如果我有一个这样的函数 function foo this console log this function bar bar prototype func function foo this var test new bar test f
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 使用JS将图像的特定背景颜色设置为透明

    我正在使用以下代码来修改图像的透明度 然而 我想做的只是修改图像的背景颜色并将其 alpha 通道设置为 0 而不是整个图像 以下代码将整个图像的 Alpha 透明度设置为 0 var ctx this data getContext 2d
  • 加载 ini 文件时发生致命异常

    我的项目文件夹是 demo 其中有文件夹 application library 和 public 在应用程序文件夹中 我有一个名为 configs 的文件夹 其中有一个文件 application ini 其中包含我的数据库参数 因此 在
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 具有适当后退按钮支持的 jQuery Lightbox

    在进行了一些可用性测试后 我发现参与者打开了jQuery 灯箱 http leandrovieira com projects jquery lightbox 查看更大的图像 然后 他们只需点击浏览器后退按钮 而不是单击 关闭 按钮 这会将
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • 找不到 io.confluence:kafka-protobuf-serializer:6.0.0

    直接的问题是 为什么 Gradle 没有解决我添加的这个依赖关系 dependencies kafka protobuf serializer implementation io confluent kafka protobuf seria
  • 如何从最新版本的 Ubuntu (18.10) 运行使用 SystemD 的 Docker 容器?

    我正在尝试执行使用 ubuntu latest 构建的 Docker 映像 并且在运行容器时不断收到 SystemD 错误消息 System has not been booted with systemd as init system P
  • kafka Avro 多个主题的消息反序列化器

    我正在尝试以 avro 格式反序列化 kafka 消息 我使用以下代码 https github com ivangfr springboot kafka debezium ksql blob master kafka research c
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 如何在matplotlib中基于x轴更改直方图颜色

    我有根据 pandas 数据框计算出的直方图 我想根据 x 轴值更改颜色 例如 If the value is 0 the color should be green If the value is gt 0 the color shoul
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 将传入字符串的 unicode 表示形式转换为 UTF-8?

    我正在读取一些已经转换为 html 样式 代码的数据 我现在需要将其转换回 UTF 8 字符以供查看 不幸的是我无法使用浏览器查看该字符串 我读过有关 java 中的转换的内容 似乎如果你有一个 uxxxx 字符串 那么编译器会为你转换 然
  • 在 Mono 2.8.2 中创建 WCF 服务

    我安装了 mono 2 6 7 和 WCF 服务
  • Visual Studio 2010 设计器运行时出错

    我正在使用 VS2010 如果我在设计器模式下打开一个表单并运行我的应用程序 设计器选项卡将不再显示表单设计器 而是会显示一个错误 并且只能通过重新启动 IDE 来修复 为了防止在加载设计器之前可能发生的数据丢失 必须解决以下错误 1 Er
  • 如何为工具栏上的溢出菜单中的菜单项设置字体

    我想更改项目的默认字体溢出菜单并设置自定义字体 我尝试添加一个工厂LayoutInflater并在onCreateView 方法我改变了TextView的字体 但这没有用 这是代码 在 onCreateOptionsMenu 内 getLa