android布局自动缩小,Android:如何使用屏幕尺寸缩放布局
它很大程度上取决于您要创建的自定义View和ViewGroup类的数量.我能想到的具有最少数量的自定义类的实现将是这样的(非常类似于您所描述的):>为最大的正方形自定义FrameLayout,使用自定义的onMeasure()实现将高度与可用宽度相匹配(您已经提到过这个).>嵌套的LinearLayout实例使用权重来使所有网格按钮的大小相同.这种方法的一大缺点是效率.您需要大约36个
它很大程度上取决于您要创建的自定义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
更多推荐
所有评论(0)