【背景】
对于Android中的字符的属性设置,已经知道可以静态的在xml中去定义。
现在希望实现,可以动态的,在代码中去设置属性和样式。
【解决过程】
1.搜:
android set text style
找到:
java – Android – set TextView TextStyle programmatically? – Stack Overflow
->
java – How to change a TextView’s style at runtime – Stack Overflow
2.然后基本搞定了:
(1)将需要动态设置的样式放到资源里面
在/res/values下面新建xml配置文件:
/res/values/themeConfig.xml
内容为:
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <color name="gradientStartColor">#87CEFA</color> <!-- <color name="GroupSpliterColor">#BEBDDE</color> --> <!-- <color name="GroupSpliterColor">#32A6C9</color> --> <color name="GroupSpliterColor">#2A2598</color> <style name="VariableName"> <item name="android:textColor">@color/MMBlue1</item> <item name="android:textSize">14sp</item> <item name="android:textStyle">normal</item> </style> <style name="VariableValue"> <item name="android:textSize">14sp</item> <item name="android:textStyle">normal</item> </style> </resources>
(2)xml中已有TextView的基本定义
/res/layout/variable_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="20dp" android:orientation="horizontal" > <TextView android:id="@+id/variableName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:paddingLeft="5dp" android:textColor="@color/MMBlue1" android:textSize="14sp" /> <TextView android:id="@+id/variableValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:paddingLeft="5dp" android:textSize="14sp" /> </LinearLayout>
(3)代码中就可以动态调用样式资源去配置TextView的样式了
TextView variableNameView = (TextView) variableLayout.findViewById(R.id.variableName); variableNameView.setText(name); variableNameView.setTextAppearance(context, R.style.VariableName); TextView variableValueView = (TextView) variableLayout.findViewById(R.id.variableValue); variableValueView.setText(value.toString()); variableNameView.setTextAppearance(context, R.style.VariableValue);
效果还是不错的:
3.后来对于配置文件和代码,都更新升级为:
(1)/res/values/themeConfig.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <color name="gradientStartColor">#87CEFA</color> <!-- <color name="GroupSpliterColor">#BEBDDE</color> --> <!-- <color name="GroupSpliterColor">#32A6C9</color> --> <color name="GroupSpliterColor">#2A2598</color> <color name="VariableName">#2A2598</color> <style name="Variable"> <item name="android:textSize">14sp</item> <item name="android:textStyle">normal</item> </style> <style name="Variable.Name"> <item name="android:textColor">@color/VariableName</item> </style> <style name="Variable.Value"> </style> <style name="Variable.Unit"> </style> </resources>
(2)代码中:
TextView variableNameView = (TextView) variableLayout.findViewById(R.id.variableName); variableNameView.setText(name); variableNameView.setTextAppearance(context, R.style.Variable_Name); TextView variableValueView = (TextView) variableLayout.findViewById(R.id.variableValue); variableValueView.setText(value.toString()); variableNameView.setTextAppearance(context, R.style.Variable_Value); TextView variableUnitView = (TextView) variableLayout.findViewById(R.id.variableUnit); variableUnitView.setText(unit.toString()); variableUnitView.setTextAppearance(context, R.style.Variable_Unit);
【总结】
想要动态在代码中配置字符的样式,主要步骤就是,将样式单独弄成对应的资源resource放在/res/values/xxx.xml中,然后动态在代码中通过setTextAppearance传入对应的R.style.yyy即可。
转载请注明:在路上 » 【已解决】Android中动态设置字符的属性和样式style