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

时间:2016-11-17 19:28:49

标签: android

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

<declare-styleable name="InputRow">
    <attr name="descriptionTextStyle" format="string" />
    <attr name="valueTextStyle" format="string" />
</declare-styleable>

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

app:descriptionTextStyle="bold"
app:valueTextStyle="italic"

但是,当我尝试从类型化数组中读取时,问题就出现了。我可以得到字符串:

if(typedArray.hasValue(R.styleable.InputRow_descriptionTextStyle)) {
   setDescriptionTextStyle(typedArray.getString(R.styleable.InputRow_descriptionTextStyle));
}

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

我无法将样式更改为int格式,因为="bold"将无效,因此我对如何获取文本样式感到茫然。

2 个答案:

答案 0 :(得分:1)

您可以使用

 public void setTypeface(Typeface tf);

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

同样,对于将字符串转换为字体,您可以执行以下操作:

switch (typefaceString) {
case SANS:
tf = Typeface.SANS_SERIF;
break;

case SERIF:
tf = Typeface.SERIF;
break;

case MONOSPACE:
tf = Typeface.MONOSPACE;
break;
}

答案 1 :(得分:0)

感谢pskink的建议,我看了一下Android如何定义样式:

[info] Executing: |storeEval | javascript{ ((new Date()).getMonth()+1)+'/'+(new Date()).getDate()+'/'+(new Date()).getFullYear().toString()} | currentdate |
[info] script is: 11/17/2016
[info] Executing: |echo | ${currentdate} | |
[info] echo: 0.00032096171802054155 

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

<!-- Default text typeface style. -->
<attr name="textStyle">
    <flag name="normal" value="0" />
    <flag name="bold" value="1" />
    <flag name="italic" value="2" />
</attr>

然后我可以通过调用<attr name="descriptionTextStyle"> <flag name="normal" value="0" /> <flag name="bold" value="1" /> <flag name="italic" value="2" /> </attr> 来设置我的项目,并在课程中调用app:descriptionTextStyle="bold"并按照我的说法调用typedArray.getInt()方法。谢谢你的帮助!