我必须统一分配视图上的文本。一直无法找到满足所有屏幕尺寸甚至常见屏幕尺寸的方法。我想要实现的布局如下所示。
红色框告诉我正在尝试的textview。
我尝试了以下方法:
1)尝试使用带有和不带9个补丁的图像,但无法正确缩放。 2)尝试使用不同尺寸的铲斗,如sw320 sw480 sw600和sw720。虽然它确实为我能够测试的设备解决了这个问题,但它并不可靠。我在这些桶中添加了不同的文本大小。
我讨厌使用带有表格,网格或线性布局的24个texviews。
我还有其他选择吗?解决方案2使用起来非常令人沮丧,从尺寸到布局导航再回来大约20次。应该有一个更简单的方法来做到这一点,如果没有,请告诉我。
答案 0 :(得分:1)
使用自定义视图并覆盖onDraw来绘制数字。包含View的布局可以使用尺寸(来自res / values /)指定其大小,View将根据这些尺寸自动计算出数字之间的字体大小和间距。
E.g。
自定义视图:
public class ColumnNumbersView extends View
{
private final static int NUMBER_OF_COLUMNS = 25;
private float textSize;
private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
...
获得大小:
@Override
protected void onLayout(...
{
super.onLayout(...
// work out our text size from getHeight()
textSize = getHeight()/2; // or something like that
// work out the spacing between the numbers along the x axis
textPosXInc = (getWidth() / NUMBER_OF_COLUMNS) / 2; // or something like that
}
做图:
@Override
protected void onDraw(final Canvas canvas)
{
super.onDraw(canvas);
int x = 0;
for(int i=0; i < NUMBER_OF_COLUMNS; i++)
{
final String number = String.valueOf(i);
final int halfWidth = textPaint.measureText(number) / 2;
canvas.drawText(number, x - halfWidth, 0, textPaint);
x += textPosXInc;
}
}
那应该画出一些接近的东西,但是第一个和最后一个数字不能正确绘制,我会留给你修复。
修改
请记住,您不能对此View的维度使用wrap_content,因为它没有通过覆盖onMeasure()来指定要包装的大小。所以它需要设置特定的大小,或者match_parent。