使用TextViews的可变计数填充布局

时间:2014-05-26 10:52:07

标签: android android-layout dynamic textview

我需要根据从服务器收到的信息显示TextViews。例如。我从服务器得到了7个字。我需要将每个单词放在不同的TextView中以使其可单击。文本视图应在行中从左到右填充设备的屏幕。到达右边框时,下一行TextView应放在下一行,依此类推。 TextViews的数量是可变的,Textviews中的单词也是不同的。

3 个答案:

答案 0 :(得分:0)

为它们创建新的textView实例和setLayoutparams。

示例,

TextView[] tx = new TextView[10];
    TableRow[] tr = new TableRow[10];
    for(i=0; i<10; i++) {
        tx[i] = new TextView(this);
        tx[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tx[i].setText("Data")
        tr[i] = new TableRow(this);
        tr[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tr[i].addView(tx[i]);
        // and then adding table row in tablelayout
    }

答案 1 :(得分:0)

对于您的问题,您可以使用单个textview并将spannable字符串设置为textview 在该字符串中,您可以提供所需的点击次数。

答案 2 :(得分:0)

我找到了解决方案。 我不会把整个代码放在这里。只有主要部分。 有垂直的LinearLayout。 我们需要计算布局的宽度。我不能这样做因为我在绘制之前做了所有的计算。 我的屏幕宽度是陡峭的:

    Display display = ((Activity) context).getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics();
    display.getMetrics(outMetrics);
    float density = getResources().getDisplayMetrics().density;
    float dpWidth = outMetrics.widthPixels / density;
    int displayWidth = (int) dpWidth;

这是可用于放置Textviews的可用空间。 将LinearLayout添加到父级。创建Textview并计算宽度:

    // Calculate size of the button
    Rect bounds = new Rect();
    Paint textPaint = menuCategoryTV.getPaint();
    textPaint.getTextBounds(text, 0, text.length(), bounds);
    int width = bounds.width();       

然后检查是否有空间将Textview放置在布局中。为了从屏幕上的可用空间中扣除TextView的宽度。当然第一个textView有一个空间。直到你的TextView不是很长。但是在通过TextViews填充布局之后,将没有新元素的空间。创建新的LinearLayout,将其添加到父级并将可用空间重置为初始值。