android布局自动缩小,Android:如何使用屏幕尺寸缩放布局

本文探讨了如何通过减少自定义View和ViewGroup的使用,提高UI布局效率。提出使用自定义FrameLayout和LinearLayout权重来创建等大网格,并介绍了利用Paint.measureTextBounds()优化文本大小的方法。还建议创建自定义BlockLayout以减少视图层级和布局开销,从而创建高效的大规模网格布局。

它很大程度上取决于您要创建的自定义View和ViewGroup类的数量.我能想到的具有最少数量的自定义类的实现将是这样的(非常类似于您所描述的):

>为最大的正方形自定义FrameLayout,使用自定义的onMeasure()实现将高度与可用宽度相匹配(您已经提到过这个).

>嵌套的LinearLayout实例使用权重来使所有网格按钮的大小相同.

这种方法的一大缺点是效率.您需要大约36个LinearLayout实例才能在更大的9×9网格内创建小的9×9网格……这是纯布局开销的36个视图.

就文本大小而言,我可以想到几种方法来处理这个问题.一种方法是使用Paint.measureTextBounds()(您可以获取任何TextView的Paint对象来进行测量),以确定在测量每个按钮后在每个按钮中生成文本所需的大小.不幸的是,这将是一个有点迭代的过程,因为Paint根据其当前设置测量给定文本,因此您需要:

>设置文字大小

>测量界限

>检查身高

>重复直到尺寸合适

好消息是你只需要这样做一次,然后将其应用到所有网格按钮,但是你需要等到网格按钮被测量.

这里的另一个选择是在ImageView之类的内容中显示图像而不是文本,ImageView可以将内容缩放到其大小.您可以使用我写的TextDrawable这样的内容来将文本内容设置为可扩展且没有质量损失的图像.

现在回到布局.你可以通过创建一个自定义的ViewGroup来测量和布局网格来获得大量的效率(名称GridLayout已经被采用……并且它不能完全用于此目的,所以我们称之为BlockLayout).创建自定义BlockLayout将允许您测量每个块的大小,并使用单个父级而不是4个LinearLayout实例在网格中布置9个子视图.这与您测量整体方块的方式基本相同,只是均匀划分.

然后,您可以使用仅10个布局开销实例构建整个布局……如果您可以将整个内容编码到单个ViewGroup中,则更少.

基本上,您可以编写的用于展平视图层次结构的代码越多,应用程序整体运行的效果就越好.

HTH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值