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 三星设备设置:) 您是否必须更改默认字体大小或类型?可以分享一下截图吗 您可以像这样指定字体:有一种方法,你可以通过调用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】:我在使用转义字符 &lt;
时遇到了类似的问题。您必须改用&lt;
。例如:
<string name="greetings"><b>From Russia with love</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 设置为粗体不起作用的主要内容,如果未能解决你的问题,请参考以下文章