APP字体大小那些事

(总能遇见些问题的)从android4.0起系统设置的”显示“提供设置字体大小的选项。这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统字体后瞬间变得面目全非。或者app内需要有字体大小设置的,怎么可以设置全文中的字体大小呢。

对于app不需要根据系统字体的大小来改变的

可以在activity基类(app中所有的activity都应该有继承于我们自己定义的一个BaseActivity类)中加上以下code:

@Override  
public Resources getResources() {  
    Resources res = super.getResources();    
    Configuration config=new Configuration();    
    config.setToDefaults();    
    res.updateConfiguration(config,res.getDisplayMetrics() );  
    return res;  
}   

设置App全局字体大小

首先Activity继承自己的BaseActivity,然后在BaseActivity里做了这么一件事

public class BaseActivity extends Activity {          
    private int states = 3;              
    @Override  
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);        
        if (1 == states) {  
            setTheme(R.style.Default_TextSize_Small);   
        } else if (2 == states) {         
            setTheme(R.style.Default_TextSize_Middle);  
        } else {         
            setTheme(R.style.Default_TextSize_Big);         
        }  
    }  
}

一般情况下 我们调节全局字体大小会在app的设置菜单里,这里我们模拟大,中,小 三种字体分别为 1,2,3,很明显我们是以setTheme的方式来掌控全局字体大小,这时候 重点来了,如何set过主题,字体大小就会发生改变呢,我们来看xml布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textSize="?textsize" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textSize="?textsize2" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textSize="?textsize3" />
</LinearLayout>  

上面有3个textview,这里在textSize 属性设置的是 ?textsize ,这是什么意思呢,这里表示引用attr文件里面的属性,attrs 包含内容如下,

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <attr name="textsize" format="reference|dimension" />
    <attr name="textsize2" format="reference|dimension" />
    <attr name="textsize3" format="reference|dimension" />

</resources>  

写到这里很多人已经恍然大悟了,原来是这样,同时 因为是在set不同的主题,所以我们需要在style文件里申明,

<?xml version="1.0" encoding="utf-8"?>  
<resources>        
    <style name="Default_TextSize_Small">  
        <item name="textsize">@dimen/tset_small</item>  
        <item name="textsize2">@dimen/tset_middle</item>  
        <item name="textsize3">@dimen/tset_big</item>  
    </style>              
    <style name="Default_TextSize_Middle">  
        <item name="textsize">@dimen/tset_small2</item>  
        <item name="textsize2">@dimen/tset_middle2</item>  
        <item name="textsize3">@dimen/tset_big2</item>  
    </style>       
        <style name="Default_TextSize_Big">  
        <item name="textsize">@dimen/tset_small3</item>  
        <item name="textsize2">@dimen/tset_middle3</item>  
        <item name="textsize3">@dimen/tset_big3</item>  
    </style>  

</resources>  

dimen里面就是我们常规设置的字体大小,

<?xml version="1.0" encoding="utf-8"?>  
<resources>           
    <dimen name="tset_small">12sp</dimen>  
    <dimen name="tset_middle">16sp</dimen>  
    <dimen name="tset_big">20sp</dimen>  

    <dimen name="tset_small2">18sp</dimen>  
    <dimen name="tset_middle2">22sp</dimen>  
    <dimen name="tset_big2">26sp</dimen>  

    <dimen name="tset_small3">22sp</dimen>  
    <dimen name="tset_middle3">26sp</dimen>  
    <dimen name="tset_big3">30sp</dimen>              
</resources>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值