以编程方式在Android中创建样式而不引用资源

时间:2013-02-07 12:25:16

标签: android dynamic styles spannablestring

我正在开发一个应用程序,该应用程序从XML文档中读取文本,然后在屏幕上显示该文本。我希望能够以XML文档中给出的参数(字体,大小,颜色,粗体/斜体等)编程方式创建TextAppearanceSpan对象,这些参数不依赖于资源文件(对于{{1在我的TextView中)。

我正在查看以下构造函数:

SpannableString

但我似乎无法找到有关TextAppearanceSpan(String family, int style, int size, ColorStateList color, ColorStateList linkColor)如何工作的任何信息。我正在努力做甚么可能吗?

1 个答案:

答案 0 :(得分:4)

您可以在此处查看ColorStateList的源代码:

GrepCode: ColorStateList

例如,以下XML选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true" android:color="@color/testcolor1"/>
   <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
   <item android:state_enabled="false" android:color="@color/testcolor3" />
   <item android:color="@color/testcolor5"/>
 </selector>

等同于以下代码:

int[][] states = new int[4][];
int[] colors = new int[4];

states[0] = new int[] { android.R.attr.state_focused };
states[1] = new int[] { android.R.attr.state_pressed, -android.R.attr.state_enabled };
states[2] = new int[] { -android.R.attr.state_enabled };
states[3] = new int[0];

colors[0] = getResources().getColor(R.color.testcolor1);
colors[1] = getResources().getColor(R.color.testcolor2);
colors[2] = getResources().getColor(R.color.testcolor3);
colors[3] = getResources().getColor(R.color.testcolor5);

ColorStateList csl = new ColorStateList(states, colors);

有关颜色状态和选择器如何工作的文档是here