首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接受自定义视图的文本样式

接受自定义视图的文本样式
EN

Stack Overflow用户
提问于 2016-11-18 03:28:49
回答 2查看 1.4K关注 0票数 3

因此,我正在编写自己的自定义视图,其中包含一个TextView和一个EditText。我想要做的是让用户为每一个单独设置一个文本样式,如下所示:

代码语言:javascript
运行
复制
<declare-styleable name="InputRow">
    <attr name="descriptionTextStyle" format="string" />
    <attr name="valueTextStyle" format="string" />
</declare-styleable>

我认为这是可行的,所以在XML中我可以这样说:

代码语言:javascript
运行
复制
app:descriptionTextStyle="bold"
app:valueTextStyle="italic"

然而,当我试图从类型化数组中读取时,问题就来了。我可以得到字符串:

代码语言:javascript
运行
复制
if(typedArray.hasValue(R.styleable.InputRow_descriptionTextStyle)) {
   setDescriptionTextStyle(typedArray.getString(R.styleable.InputRow_descriptionTextStyle));
}

但是当我想调用descriptionTextView.setTypeface(Typeface tf, int style)时,我需要第二个参数的整数值,而我没有这个整数值。

我不能将样式更改为int格式,因为那样="bold"就无效了,所以我不知道如何获得文本样式。

EN

回答 2

Stack Overflow用户

发布于 2016-11-18 04:02:52

多亏了pskink的建议,我看了Android是如何定义风格的:

代码语言:javascript
运行
复制
<!-- Default text typeface style. -->
<attr name="textStyle">
    <flag name="normal" value="0" />
    <flag name="bold" value="1" />
    <flag name="italic" value="2" />
</attr>

鉴于此,我能够相应地更新我的自定义属性:

代码语言:javascript
运行
复制
<attr name="descriptionTextStyle">
    <flag name="normal" value="0" />
    <flag name="bold" value="1" />
    <flag name="italic" value="2" />
</attr>

然后,我可以通过调用app:descriptionTextStyle="bold"来设置我的项目,并且在类中调用typedArray.getInt()setTypeface()方法。谢谢你的帮助!

票数 3
EN

Stack Overflow用户

发布于 2016-11-18 03:43:58

您可以使用

代码语言:javascript
运行
复制
 public void setTypeface(Typeface tf);

方法,它只需要一个typeface参数。

同样,为了将字符串转换为字体,你可以这样做:

代码语言:javascript
运行
复制
switch (typefaceString) {
case SANS:
tf = Typeface.SANS_SERIF;
break;

case SERIF:
tf = Typeface.SERIF;
break;

case MONOSPACE:
tf = Typeface.MONOSPACE;
break;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40663434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档