2013-03-01 84 views
1

我必须在视图上均匀分配文本。一直无法找出满足所有屏幕尺寸甚至常见屏幕尺寸的方式。我想要实现的布局如下所示。 distributed text如何处理不同的屏幕尺寸,以便textview缩放

红框告诉我正在尝试工作的textview。

我曾尝试以下方法:

1)尽量选用形象,并没有9个补丁,它不正确缩放。 2)尝试使用不同大小的存储桶,如sw320 sw480 sw600和sw720。虽然它确实解决了我可以测试的设备,但它不可靠。我在这些桶中放入不同的文本大小。

我讨厌用表格,网格或线性布局使用24 texviews。

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

回答

1

使用自定义视图并重写onDraw来绘制数字。包含视图的布局可以使用尺寸(来自res/values /)来指定其大小,并且视图将根据这些尺寸自动计算出数字之间的字体大小和间距。

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; 
     } 
    } 

这应该汲取的东西密切,第一个和最后一个号码不会尽管画正确,我会留下来让你解决。

编辑

请记住,你不能使用WRAP_CONTENT对这一观点的尺寸,因为它没有指定的大小为覆盖onMeasure包()。所以它需要设置特定的尺寸或match_parent。

+0

这可以工作,我相信文字的大小可以从视图宽度中提取。现在试试这个。 – JehandadK 2013-03-01 10:05:08

+0

感谢您的想法。我在文本和检查measuretext之间添加更多空格以确保文本dosent溢出。 – JehandadK 2013-03-01 16:35:28