有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在布局中以编程方式生成文本视图

我需要从一个随机的、API生成的ArrayList在布局中生成TextView。我似乎找不到一种方式,让它们出现在一行中,像一个字符串一样,一行接一行,一旦行达到最大布局宽度限制,它们也会在下面移动。我希望每个文本视图都能像我单击它们一样快速显示

Would like to achieve something like this...

这是当前代码,但行停止了,我不知道如何将其移到下面。目前我使用相对布局作为基本布局,但这不是必需的

for (int i = 0; i < abc.size(); i++) {
    titleText = new TextView(this);
    titleText.setId(i);
    titleText.setText(abc.get(i));
    relativeLayout.addView(titleText, i);
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(10, 10, 10, 10);
    layoutParams.addRule(RelativeLayout.RIGHT_OF, titleText.getId() - 1);
    titleText.setLayoutParams(layoutParams);
    titleText.setTextColor(getResources().getColor(R.color.teal_700));
    tvArray.add(titleText);
} 

共 (2) 个答案

  1. # 1 楼答案

    范例

    在xml中

    <LinearLayout 
            android:id="@+id/my_ll"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
    </LinearLayout>
    

    然后用Java编写代码。班级

    LinearLayout my_ll = (LinearLayout) findViewById(R.id.my_ll);
            for(int i=0;i<your_number_of_textviews;i++)
            {
                TextView text = new TextView(this);
                text.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                text.setText(""+i);
                my_ll.addView(text);
            }
    
  2. # 2 楼答案

    我认为这个解决方案可以解决这个问题。在循环之前,首先使用-

    Point screenSizePoint = new Point();
    // this gives you the furthest point from 0,0 e.g. 1440x3168
    getWindowManager().getDefaultDisplay().getSize(screenSizePoint);
    int sum = 0;
    

    然后你在某处检索你的abc列表。 然后你总是用这个来计算当前文本视图的宽度

    titleText.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    int width = titleText.getMeasuredWidth();
    sum += width;
    
    if (sum >= screenSizePoint.x) {
       // shift to next line
    }
    

    将其与前面放置的文本视图的宽度相加,如果宽度大于屏幕宽度,则从另一行开始