我想布局如下的视图,但我不知道如何这样做:
这是我想象的一个小图片:
 .----------------------. 
 |   .--------------.   |  
 | b |              | b |  
 | g |              | g | 
 |   |              |   |  
 | i |  MySurface   | i | 
 | m |     View     | m | 
 | a |              | a | 
 | g |  (2:3 w:h)   | g | 
 | e |              | e | 
 |   *--------------*   | 
 |.--------------------.| 
 ||                    || 
 ||   SomeOtherView    || 
 ||                    || 
 |*--------------------*| 
 *----------------------* 
就设置MySurfaceView而言,我认为普通的layout_width和layout_height对我没有帮助,因为直到屏幕部分布局并SomeOtherView放置之后我才知道可用的屏幕尺寸.
是否有一些函数MySurfaceView需要覆盖,例如将作为参数传递可用的屏幕空间,让我决定如何设置视图的宽度和高度?
"通货膨胀"是我正在寻找的正确名词吗?我认为这与我正在寻找的东西有关,但我真的不知道术语.
以下更新了我的研究结果,我认为可能是正确的解决方案.
Tim*_*Tim 13
做了更多的研究,我想我想出了我需要做的事情:
我想要覆盖的函数是onMeasure(int widthSpec, int heightSpec)父级调用的函数,其中包含宽度和高度的建议(请参阅View.MeasureSpec).我还设置了xml中MySurfaceView的layout_width/height wrap_content.然后当onMeasure被调用时,我可以计算可用的宽高比并根据需要设置视图的宽度和高度.
我做的第二件事就是把我MySurfaceView的FrameLayout作为唯一的孩子.我最初MySurfaceView使用SomeOtherViewfrom my image 在RelativeLayout中.RelativeLayout的问题在于它不会以允许我修复宽高比的方式协商宽度/高度.
onMeasure在测量过程中被多次调用,而RelativeLayout的工作方式是它首先询问自定义视图的宽度而不告诉它可用的高度,然后返回并询问高度,同时宽度被锁定到你指定的高度在第一遍(MeasureSpec.EXACTLY).这使得无法生成特定比率的视图,因为在知道可用高度之前必须确认宽度.
一旦进入FrameLayout,我就没有这个问题,因为MeasureSpecs onMeasure只传递给了限制AT_MOST.这意味着我可以在onMeasure的每次传递过程中自由地改变宽度和高度,因此我可以根据可用区域最终计算我的宽高比.
尚未确认这适用于所有情况,但希望这将有助于某人.
| 归档时间: | 
 | 
| 查看次数: | 9582 次 | 
| 最近记录: |