android根据分辨率自动调整字体大小的实例代码
手机设备太多,分辨率也不一样,看到网上大部分的适应字体的方法是定义values320×480或value-hdpi方式去处理。
采用第一种的就惨了,很多设备的分辨率是不一样的,难道要每种都定义吗?
采用第二种的在平板电脑里没有效果。
最后还是代码的方式方便快捷。。。
[java]
//遍历设置字体
public static void changeviewsize(viewgroup viewgroup,int screenwidth,int screenheight) {//传入activity顶层layout,屏幕宽,屏幕高
int adjustfontsize = adjustfontsize(screenwidth,screenheight);
for(int i = 0; i<viewgroup.getchildcount(); i++ ){
view v = viewgroup.getchildat(i);
if(v instanceof viewgroup){
changeviewsize((viewgroup)v,screenwidth,screenheight);
}else if(v instanceof button){//按钮加大这个一定要放在textview上面,因为button也继承了textview
( (button)v ).settextsize(adjustfontsize+2);
}else if(v instanceof textview){
if(v.getid()== r.id.title_msg){//顶部标题
( (textview)v ).settextsize(adjustfontsize+4);
}else{
( (textview)v ).settextsize(adjustfontsize);
}
}
}
}
//获取字体大小
public static int adjustfontsize(int screenwidth, int screenheight) {
screenwidth=screenwidth>screenheight?screenwidth:screenheight;
/**
* 1. 在视图的 onsizechanged里获取视图宽度,一般情况下默认宽度是320,所以计算一个缩放比率
rate = (float) w/320 w是实际宽度
2.然后在设置字体尺寸时 paint.settextsize((int)(8*rate)); 8是在分辨率宽为320 下需要设置的字体大小
实际字体大小 = 默认字体大小 x rate
*/
int rate = (int)(5*(float) screenwidth/320); //我自己测试这个倍数比较适合,当然你可以测试后再修改
return rate<15?15:rate; //字体太小也不好看的
}
//遍历设置字体
public static void changeviewsize(viewgroup viewgroup,int screenwidth,int screenheight) {//传入activity顶层layout,屏幕宽,屏幕高
int adjustfontsize = adjustfontsize(screenwidth,screenheight);
for(int i = 0; i<viewgroup.getchildcount(); i++ ){
view v = viewgroup.getchildat(i);
if(v instanceof viewgroup){
changeviewsize((viewgroup)v,screenwidth,screenheight);
}else if(v instanceof button){//按钮加大这个一定要放在textview上面,因为button也继承了textview
( (button)v ).settextsize(adjustfontsize+2);
}else if(v instanceof textview){
if(v.getid()== r.id.title_msg){//顶部标题
( (textview)v ).settextsize(adjustfontsize+4);
}else{
( (textview)v ).settextsize(adjustfontsize);
}
}
}
}
//获取字体大小
public static int adjustfontsize(int screenwidth, int screenheight) {
screenwidth=screenwidth>screenheight?screenwidth:screenheight;
/**
* 1. 在视图的 onsizechanged里获取视图宽度,一般情况下默认宽度是320,所以计算一个缩放比率
rate = (float) w/320 w是实际宽度
2.然后在设置字体尺寸时 paint.settextsize((int)(8*rate)); 8是在分辨率宽为320 下需要设置的字体大小
实际字体大小 = 默认字体大小 x rate
*/
int rate = (int)(5*(float) screenwidth/320); //我自己测试这个倍数比较适合,当然你可以测试后再修改
return rate<15?15:rate; //字体太小也不好看的
}
最后在avtivity的oncreate完后调用一下changeviewsize就行了。。。文字大了那么它对应的背景也就跟着大,所以建议控件的背景图片用9宫格类型的图片,看起来舒服。
另外附加,如果你开发的应用想在平板电脑上浏览无碍请在androidmanifest.xml文件中的manifest节点(dtd建议放在application节点上面)里加入:
[java]
<supports-screens
android:anydensity="true"
android:largescreens="true"
android:normalscreens="true"
android:smallscreens="true"
android:resizeable="true"/>
<supports-screens
android:anydensity="true"
android:largescreens="true"
android:normalscreens="true"
android:smallscreens="true"
android:resizeable="true"/>
推荐阅读