欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android根据分辨率自动调整字体大小的实例代码

程序员文章站 2023-12-04 21:36:10
手机设备太多,分辨率也不一样,看到网上大部分的适应字体的方法是定义values320×480或value-hdpi方式去处理。采用第一种的就惨了,很多设备的分辨率是不一样的...

手机设备太多,分辨率也不一样,看到网上大部分的适应字体的方法是定义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"/>