我有一组12个图像在布局中显示.这个数字是半任意选择的,但是对于纵向模式可以归结为3个横向和4个垂直,而对于横向模式则相反.
第一个实现是使用gridview.问题是高度不能强制适合屏幕.对于一种解决方法,我可以(尝试)缩放课程图像,但几乎不可能计算出网格视图可用的空间:总屏幕尺寸是已知的,但你必须"猜测"通知栏的大小并且没有'似乎是一种优雅的溶剂.测量的大小实际上并不值得信任:我没有在方向更改(速度)上完全重新启动,但是屏幕的构建方式不能在现场获得完整的空间.最后得出的结论是,我不想计算图像的大小,然后相应地对它们进行缩放:我认为最好说出视图应该如何适应屏幕,对吧?
所以接下来的尝试就是使用TableLayout.使用"ShrinkColumns ="*"图像很合适,所以图像的大小现在是我们想要它们的大小.但是我们可能在高度上的'额外'空间现在在桌面之间均匀分配.这是可以预期的,但很难看
当前的代码似乎无关紧要,因为它不起作用,但最终看起来像这样:我已经删除了所有填充和其他看起来不相关的东西.(对于肖像:)
<TableLayout
android:shrinkColumns="*">
<TableRow>
<ImageView/>
<ImageView/>
<ImageView/>
</TableRow>
… (repeat 3 tablerows)
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
为了"缩放"过大的图像,TableLayout具有"shrinkcolumns ="*""属性.
我们怎样才能让三个ImageView在TableRow的中心对齐而不是在宽度上均匀分布?对于垂直列也是如此,我们如何将所有内容保持在一起而不是在屏幕的高度上展开?基本上,"多余"空间应该作为填充/边距到达边,现在它介于图像之间.
示例:左侧屏幕截图显示左/右距离太多,右侧有太多顶部/底部
首先,我创建了一个自定义视图,通过覆盖该onDraw()
方法来吸引自己.事实证明这是不切实际的,因为我需要创建大量的视图.所以我创建了一个自定义的ViewGroup,它使用该onLayout()
方法绘制每个子节点.
我在android文档中读到了子视图应该实现一个layout()
方法.但是我创建的子视图使用onDraw方法绘制自己.我该怎么处理?我应该摆脱这种onDraw()
方法吗?任何人都可以举例说明该layout()
方法的工作原理以及我应该如何将我的onDraw()
方法"转换" 为layout()
方法?
我目前的onDraw()
方法如下:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//Draw Border.
canvas.drawRect(mCellBounds, mBorderPaint);
//Draw Background.
canvas.drawRect(mBackgroundBounds, mBackGroundPaint);
//Draw Value if not 0.
if(Value != 0)
canvas.drawText(Integer.toString(Value), ValueX, ValueY, mNumberPaint);
//Draw Notes if Value == 0.
else
{
for(int i = 0 ; i < 9 ; i++)
if(NoteList[i])
canvas.drawText(Integer.toString(i), NoteX + ((i%3) * NoteMeasureX), NoteY + ((i/3) * NoteMeasureY), mNotePaint);
}
}
Run Code Online (Sandbox Code Playgroud)