gpt4 book ai didi

android - 如何处理不同的屏幕尺寸以便 TextView 缩放

转载 作者:行者123 更新时间:2023-11-30 03:44:54 25 4
gpt4 key购买 nike

我必须在 View 上均匀分布文本。一直没能想出满足所有屏幕尺寸甚至是常见屏幕尺寸的方法。我想要实现的布局如下所示。 distributed text

红色框告诉我正在尝试处理的 TextView 。

我尝试了以下方法:

1) 尝试使用一张图像,有和没有 9-patch ,它不能正确缩放。2) 尝试使用不同大小的桶,如 sw320 sw480 sw600 和 sw720。虽然它确实为我能够测试的设备解决了这个问题,但它并不可靠。我在这些桶中放置了不同的文本大小。

我讨厌使用带有表格、网格或线性布局的 24 个 texview。

我还有哪些其他选择?解决方案 2 使用起来非常令人沮丧,从维度导航到布局然后再返回大约 20 次。应该有一个更简单的方法来做到这一点,如果没有请告诉我。

最佳答案

使用自定义 View 并覆盖 onDraw 来绘制数字。包含 View 的布局可以使用维度(来自 res/values/)指定其大小, View 将根据这些维度自动计算出字体大小和数字之间的间距。

例如

自定义 View :

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。

关于android - 如何处理不同的屏幕尺寸以便 TextView 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com