所以我正在编写自己的自定义视图,其中包含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"
将无效,因此我对如何获取文本样式感到茫然。
答案 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()
方法。谢谢你的帮助!