Android - 将 TextView 设置为粗体不起作用

Posted

技术标签:

【中文标题】Android - 将 TextView 设置为粗体不起作用【英文标题】:Android - Setting TextView to Bold Not Working 【发布时间】:2013-06-04 08:08:38 【问题描述】:

这是 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/modal_list_row"
    android:layout_
    android:layout_
    android:paddingBottom="7.5dp"
    android:orientation="vertical" >

    <TextView
                android:id="@+id/title_text_view"
                android:layout_
                android:layout_
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:gravity="center"
                android:text="@string/alert_title_small"
                android:textColor="@color/alert_dialog_text_color"
                android:textSize="@dimen/alert_dialog_title_font_size"
                android:textStyle="bold" />

</RelativeLayout>

虽然图形布局显示粗体文本,但在设备上却不是。是设备还是什么?

更新:

对于那些不断要求完整 XML 的人,这里更新了。一个简单的相对布局。这是Java代码:

this.titleTextView.setText(this.modalListState.title);

要考虑的事情:可能是由于设备字体造成的吗?有人要确认 Galaxy S3 吗?会不会是活动风格?这是用于整个应用程序的一个:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

-->
<style name="AppBaseTheme" parent="android:Theme.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.

    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

<style name="TransparentActivity" >
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFullscreen">false</item>
</style>

TransparentActivity 样式用于相关活动。

【问题讨论】:

您确定没有在任何地方更改java代码中的TextView属性吗? 我确定。只在代码中引用它来设置它的文本。 有什么特别的设备吗? 能否请您粘贴完整的 xml ,以及 alert_title_small,alert_dialog_text_color,alert_dialog_title_font_size 的值是什么以获得更多信息? 你可以参考这个链接。 ***.com/questions/6200533/… 【参考方案1】:

好吧,我找到了一个愚蠢的答案来解决这个问题。我在设备上使用了自定义字体,而不是默认字体。一旦我切换到默认的,一切都按预期工作!

【讨论】:

能告诉大家你是怎么改成默认字体的吗?这是通过在布局中定义字体属性或三星设备设置中的内容。 @skpal202 三星设备设置:) 您是否必须更改默认字体大小或类型?可以分享一下截图吗 您可以像这样指定字体:sans-serif-light。如果删除此行,则可以设置样式 伙计,你为我节省了很多时间。在三星 S5 中遇到了这个问题!【参考方案2】:

有一种方法,你可以通过调用setTypeface方法来设置textview字体...

 textView.setTypeface(null, Typeface.BOLD_ITALIC);
 textView.setTypeface(null, Typeface.BOLD);
 textView.setTypeface(null, Typeface.ITALIC);

也可以参考这个链接...

Set TextView style (bold or italic)

【讨论】:

仍然无法正常工作......似乎有些东西会覆盖这种风格,尽管我确信我不是通过代码来做的 我已经在使用这种方法,但是我将按钮中的当前字体作为第一个参数传递,并且遇到了与 OP 相同的问题。将其更改为 null 解决了我的问题。 谢谢,将 null(而不是 TextView 的字体)作为第一个参数传递也解决了我的问题。【参考方案3】:

当您在移动设备上运行应用程序时,TextView 没有变为粗体的原因是您必须在活动中使用过书法。因此,要将样式更改为粗体,您只需在 java 文件中编写以下代码即可。

 textView.setTypeface(textView.getTypeface(), Typeface.BOLD);

祝你好运

【讨论】:

这正是我的情况 - 在注释掉对 CalligraphyConfig.initDefault(..) 的调用后,xml 属性 android:textStyle="bold" 正在工作。很好的见解,谢谢【参考方案4】:

大部分答案都是正确的。

你也可以使用所谓的:SpannableString

你可以这样使用它:

String bold = "yes !";
String notBold = "no ";
SpannableString text = new SpannableString ( notBold + bold );
text.setSpan ( new StyleSpan ( Typeface.BOLD ) , notBold.length () , text .length () , 0 );
myTextView.setText ( text , BufferType.SPANNABLE );

SpannableString 的好处在于您可以应用多个跨度,每个跨度在字符串的不同部分!正如你所注意到的,我只在字符串的一部分上应用了粗体字面(你指定了开始和结束索引),它应该看起来像这样:

没有是的!

setSpan 方法中,您可以按特定顺序指定要应用的 SPAN、起始索引、结束索引和标志(我总是使用 0)。

您甚至可以应用其他跨度,例如更改文本大小(使用 RelativeSizeSpan ),甚至颜色(使用 ForegroundColorSpan )等等!

这是一个颜色范围的示例,您可以通过以下方式实现:

text.setSpan ( new ForegroundColorSpan ( Color.RED) , 0 , notBold .length () , 0 );

现在,字符串的第一部分(包含单词no)将显示为红色!

【讨论】:

我知道这个解决方案,但我不想每次想将 TextView 设置为粗体时都使用代码!【参考方案5】:

在运行期间可能未选取尺寸文件中定义的字体大小。 猜猜你没有在模拟器中运行应用程序。

检查以下内容以确保它不是设备。

确保为目标设备指标的正确尺寸文件正确定义字体大小 某些设备允许更改默认文本大小。检查设备中“设置”下的默认文本大小。 在清单文件中为显示布局的 Activity 应用的任何样式或主题。尝试删除样式/主题一段时间。 尝试将字体大小硬编码为偶数,例如24sp 检查任何父视图/布局的比例属性。 没有代码在运行时尝试更改字体样式。

【讨论】:

字体大小与textStyle有什么关系?不管大小,粗体就是粗体! 是什么字体?某些字体可能因任何原因没有可用的粗体变体。【参考方案6】:

我在使用转义字符 &amp;lt; 时遇到了类似的问题。您必须改用&amp;lt;。例如:

<string name="greetings">&lt;b>From Russia with love&lt;/b></string>

写在official site上。

【讨论】:

【参考方案7】:

尝试在您的 strings.xml 文件中使用 html 标签 。这是你可以做到的,android string.xml reading html tags problem

要以编程方式进行,

TextView t = new TextView(mContext);
t.setText(Html.fromHtml("<b>This is bold</b>"));

【讨论】:

我使用了这个解决方案,除了需要编码之外,它不起作用。【参考方案8】:

能否请您发布您所有的 java 和 xml 代码,以便我们收集有关您的问题的更多信息?

问题可能不在您向我们展示的 TextView 中,而是到目前为止

android:textStyle="bold"

似乎适用于您的图形布局。

【讨论】:

@A.Shatou 你的java代码中this.modalListState.title的值是多少?既然您正在将 textview 设置为它,您能否发布该代码?【参考方案9】:

字体必须有粗体/斜体/下划线(即目标)版本。系统不会神奇地为您创建它。

因此确保包含您的字体的目标变体。

【讨论】:

我的资产文件夹中只有我的 blogger_sans_light 字体,调用 textView.setTypeface(textView.getTypeface(), Typeface.BOLD);神奇地以粗体格式创建字体。【参考方案10】:

为或所有设备布局创建自定义主题。 并设置到您的 textview

我认为问题是文本会很慢,所以你可以得到任何效果。

如果您已经测试过这个问题,然后将字体大小更改为 40sp 并运行 发生了什么?

【讨论】:

以上是关于Android - 将 TextView 设置为粗体不起作用的主要内容,如果未能解决你的问题,请参考以下文章

java 小TextView扩展,在单击时将其textStyle设置为粗体。

如何设置TextView里面字体的大小

textview可以设置字体的粗体 斜体吗

将 UILabel 文本设置为粗体 [重复]

将 NSFontAttributeName 设置为粗体

Android:将文本样式设置为 TextView 文本的一部分