产品中心
Group news
江苏宏丰木业有限公司    您的位置: 首页  >  产品中心  >  正文

Android屏幕的布局与字体自适应

2019年11月01日 文章来源:网络整理 热度:75℃ 作者:刘英

在做应用时发现程序没有屏幕自适应功能,变换手机使用之后,界面就很混乱了,字体也很奇怪。经过百度的帮助,找到自适应方法。

Android屏幕的布局与字体自适应

1??????????字体的自适应

这里又有关于Android下表示大小的单位的相关知识。

下面列出几种表示单位:

1.1?????dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA (WVGA=800x480,HVGA=480x320, QVGA=320x240)推荐使用这个,不依赖像素。

1.2?????px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

1.3????pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;

1.4????sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。可以根据用户的字体大小首选项进行缩放

根据上面对单位的分析,使用sp为单位就可以实现自适应字体大小啦。亲测,比较好用。

在你的res文件夹中创建一个文件夹,叫做values-320x240。其中320x240是你手机屏幕的分辨率,根据你手机屏幕的情况做不同的命名,例如values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。

另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的东西,没有写的话程序会崩溃。

2??????????布局自适应

下面的介绍,就是今天让我几度抓狂的东西。

首先先介绍百度告知的几种自适应的方法:

2.1?????????不同的layout

Android手机屏幕大小不一,有480x320,640x360, 800x480,854x480.怎样才能让App自动适应不同的屏幕呢??其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。?但是需要注意的是根据分辨率添加layout文件时,layout这个原来的文件夹及资源一定要存在,否则会出现错误。同时在命名layout文件夹时,必须遵守这样的规则.layout-640x360 大数放在小数的前面,否则会报错。下图为需要定义的文件夹和文件:

drawable-hdpi、drawable-mdpi、drawable-ldpi的区别:?

(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)?

(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)?

(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)?

备注:三者的解析度不一样,就像你把电脑的分辨率调低,图片会变大一样,反之分辨率高,图片缩小。

2.2?????????利用weight属性

保证页面的布局随着屏幕的大小变化而变化,最好使用相对布局方式,少使用绝对赋值。

将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为9,控件B设置weight为20,那么A所占的空间为20/(9+20),B所占的空间为9/(9+20)。这样的反比属性对任何分辨率下的手机都是合适的。

这种方法虽然解决了自适应问题,但是在我使用的时候发现我有需要使用wrap_content属性的时候,就会出现layout无法填满的现象。(也有可能是我的布局有问题)。

2.3?????????在程序中制定

获得屏幕的大小,在程序中设置height和width属性。

//得到屏幕的高度

Int heigh = (Activity)m_context).getWindowManager().getDefaultDisplay().getHeight();

textview.setHeight((int)( heigh /14);

这种方法感觉不太适合复杂布局,但是我正在编写的应用时够了~

以上各种总结可能会有错误,以后发现会积极改正。

上一篇:介绍redis服务器运行过程


下一篇:我国分布式电源有哪些发展情景?不同情境下的发展规模是怎样?

友情链接
Links
鸿运国际官网_鸿运国际备用网址