app需要添加修改整体字体的功能,总结一下实现步骤。
1.新建一个属性文件,在value文件夹下创建attr.xml文件
2.这里定义了三种字体大小,可以根据需求增删
有几种字体需要根据主题变化就设置几个
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="fontsize_1" format="dimension"></attr>
<attr name="fontsize_2" format="dimension"></attr>
<attr name="fontsize_3" format="dimension"></attr>
</resources>
3.在style文件中定义四种theme,可根据需求增删,字体特大、大、中、小三个theme
<style name="Theme_Small">
<item name="fontsize_1">@dimen/pad_text_size_16</item>
<item name="fontsize_2">@dimen/pad_text_size_14</item>
<item name="fontsize_3">@dimen/pad_text_size_12</item>
</style>
<style name="Theme_Medium">
<item name="fontsize_1">@dimen/pad_text_size_18</item>
<item name="fontsize_2">@dimen/pad_text_size_16</item>
<item name="fontsize_3">@dimen/pad_text_size_14</item>
</style>
<style name="Theme_Large">
<item name="fontsize_1">@dimen/pad_text_size_20</item>
<item name="fontsize_2">@dimen/pad_text_size_18</item>
<item name="fontsize_3">@dimen/pad_text_size_16</item>
</style>
<style name="Theme_Largest">
<item name="fontsize_1">@dimen/pad_text_size_24</item>
<item name="fontsize_2">@dimen/pad_text_size_22</item>
<item name="fontsize_3">@dimen/pad_text_size_20</item>
</style>
<给相应的控件设置对应的style,,有几个属性就写几个style>
<style name="title_text"> <item name="android:textSize">?@attr/fontsize_1</item> </style> <style name="subtitle_text"> <item name="android:textSize">?@attr/fontsize_2</item> </style> <style name="article_text"> <item name="android:textSize">?@attr/fontsize_3</item> </style>
例如:
<TextView
android:id="@+id/tv_remember_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawableLeft="@drawable/activity_login_select_bg"
android:drawablePadding="@dimen/pad_height_6"
android:text="fontsize_1"
android:textColor="#666"
style="@style/title_text" />
<TextView
android:id="@+id/tv_remember_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawableLeft="@drawable/activity_login_select_bg"
android:drawablePadding="@dimen/pad_height_6"
android:text="fontsize_2"
android:textColor="#666"
style="@style/subtitle_text" />
<TextView
android:id="@+id/tv_remember_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawableLeft="@drawable/activity_login_select_bg"
android:drawablePadding="@dimen/pad_height_6"
android:text="fontsize_3"
android:textColor="#666"
style="@style/article_text
最后在activity设置主题
在setconvertview之前设置主题
public static void initData(Context context){
int mode = (Integer) SpUtils.get(context, "fontSize", -1);
if(mode==-1||mode==1){
context.setTheme(R.style.Theme_Small);
}else if(mode==2){
context.setTheme(R.style.Theme_Medium);
}else if(mode==3){
context.setTheme(R.style.Theme_Large);
}
}
这里通过sharedpreferenes保存相应的设置值,可以在设置是存入当前主题值