当前位置: 首页 > 知识库问答 >
问题:

当目标API高于21时,当查看父视图中的控件时,Android 4.4上的Typeface返回null

李耀
2023-03-14

android.support.v7 上的 AppCompat 小部件似乎存在问题。基本上,我正在使用getLayoutInflator().inflate()将XML布局加载到RelativeLayoutLinearLayout视图组中。然后,我将视图组传递到一个函数中,该函数提取子视图并尝试查看子视图的字体,如果它是文本视图、按钮还是编辑文本。这在Android 5 及更高版本上工作正常。但是,在运行 4.4.4 或更低版本的 Android 设备上,子视图的字体返回 null。为什么小部件会返回空值?

如果我膨胀视图组,然后将其添加到父活动中,并通过id找到小部件,那么我可以获得字体。

如果是TextView、按钮或EditText,我需要更改子视图的字体。下面的代码适用于运行5及以上但不低于Android 5的Android设备。

public void checkView(View view) {

// custom_typeface is already defined elsewhere in the code.
// If I check any of the widgets below for their typeface getTypeface(),
// it returns null on Android devices running 4.4.4 and below.

if (view instanceof TextView) {
    TextView txt = (TextView) view;
    Typeface custom_typeface = createTypefaceBasedOnExistingStyle(txt.getTypeface);
    txt.setTypeface(custom_typeface);
}

if (view instanceof EditText) {
    EditText edt = (EditText) view;
    Typeface custom_typeface = createTypefaceBasedOnExistingStyle(txt.getTypeface);
    edt.setTypeface(custom_typeface);
}

if (view instanceof Button) {
    Button btn = (Button) view;
    Typeface custom_typeface = createTypefaceBasedOnExistingStyle(txt.getTypeface);
    btn.setTypeface(custom_typeface);
}
}

如果有人对这个问题有任何意见或解决方案,我将不胜感激。提前谢谢你。

共有1个答案

曾高杰
2023-03-14

好的,我弄明白了是怎么回事。当你膨胀XML布局并试图获取在运行4.4.4或更低版本Android OS的设备上的XML文件中没有定义textStyle属性的小部件的字体时,该字体尚未定义,因此将返回空值在运行5.0及更高版本的Android设备上,无论怎样,小部件都会返回默认字体,因为textStyle默认为Normal对于运行Android 4.4.4及以下版本的设备,解决方案是在要更改字体的小部件的XML文件中将textStyle定义为Normal。这样,当XML布局膨胀时,就会定义textStyle并为该小部件创建字体或者,在代码中,我们可以检查字体是否返回null,然后创建一个具有普通文本样式的新字体我希望这对将来遇到同样问题的人都有意义。

 类似资料:
  • 我一直在与Gmail API的意外行为作斗争。 到目前为止,我都是通过邮件获取每封邮件的正文。有效载荷。部分[0]。身体数据,其中包含base64中的消息体。在这种情况下,零件的MimeType为text/plain。 问题是,当我检索的邮件有附件时,parts[0]MimeType是“multipart/alternative”,它的主体只有空字段。 如果邮件正文有附件,我该如何获取它? 谢谢

  • 我有一个主类,在那里初始化实例。然后,在getter的帮助下,我想从另一个类获取相同的实例,然而,它抛出了一个空指针异常。 其他类:

  • 本文向大家介绍当拖动的元素位于目标上方时,JavaScript中哪个事件发生?,包括了当拖动的元素位于目标上方时,JavaScript中哪个事件发生?的使用技巧和注意事项,需要的朋友参考一下 当拖动的元素位于放置目标上方时,会触发ondragover事件。 示例 您可以尝试运行以下代码以了解如何在JavaScript中实现ondragover事件-

  • 我有一个RecolyerView,当activity启动时,它工作得很好。当我从那个activity去另一个再回来时,recyclerView是空的。它什么也不显示,但有时它返回值,但布局受到干扰,即项目之间有空隙,或布局将有一个很大的空隙,从activity顶部。 类的代码是: 这是activity首先启动时的影像 在此输入图像说明 这是恢复activity时的形象 在此输入图像说明 日志如下所

  • 问题内容: 我打电话来创建一个文件夹,其中包含一组特定的生成数据。但是,即使尚未创建我指定的路径,也会引发该路径已存在的OSError。 例如,我打电话: 即使我在任何地方都没有测试目录或名为test的文件,也会导致此调用。 注意:我使用的实际路径名不是“ test”,而是更确定的东西,我确定它没有在任何地方命名。 请帮忙? 问题答案: 格雷格的答案是正确的,但还远远不够。 具有次错误条件,并且您

  • 问题内容: 我有一个PDO功能: 当我执行选择查询以返回一行(或更多)时,它将返回例如: 当查询失败时(例如,如果我使用错误的语法),它将返回FALSE。 但是,如果在查询中未找到任何行,则它还会返回FALSE。 因此,查询中有错误且没有行的返回值都将返回FALSE。那怎么可能?仅当查询中有错误时,我才需要返回FALSE,例如,当没有结果时,我就需要返回NULL。我的功能有问题吗? 谢谢! 问题答