以编程方式添加TextView

时间:2016-02-23 13:11:45

标签: java android

我找到了几种方法,但我的问题是我的代码必须是具有水平方向的LinearLayout。那么会发生什么是动态创建的TextViews离开屏幕。

我的代码如下:

   mProductAttrLayout.setOrientation(LinearLayout.HORIZONTAL);
   mProductAttrLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    for (ProductAttribute productAttribute : aProductAttributes) {
      String name = productAttribute.getName();
      TextView attr = new TextView(getContext());
      attr.setText(name);
      attr.setPadding(8, 8, 8, 8);
      attr.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
      attr.setTextColor(getResources().getColor(R.color.black));
      mProductAttrLayout.addView(attr);


      for (int i = 0; i < productAttribute.getValues().size(); i++) {
        TextView value = new TextView(getContext());
        value.setText(productAttribute.getValues().get(i));
        value.setTextColor(getResources().getColor(R.color.black));
        value.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        value.setPadding(8, 8, 8, 8);
        mProductAttrLayout.addView(value);
      }
    }

我目前拥有的是:

  

| 名称:值,值,值,val-- |

我需要的是:

  

名称:值,值(未知数值)

但如果它太宽,我需要它去屏幕的下一行:

  

| 名称:值,值,值,--- |

     

|价值,价值,价值。 ------------ |

希望你能理解我的需要吗?

5 个答案:

答案 0 :(得分:1)

LinearLayout在这里是错误的选择。

您可以编写自己的布局或使用现有工作。

您可能想要的通常称为FlowLayout,例如this

自定义布局可以像任何其他布局一样使用。例如。您可以使用layout.addView添加视图。 Noramlly使用的唯一区别反映在自定义layoutParams

答案 1 :(得分:0)

在OnCreate中创建流程布局: -

ref.OrderByChild("Name").equalsTo("MyFirstName").put() <---

首次调用方法以及每次要刷新视图时: -

   muscle_gp_tag_flow_layout = new FlowLayout(mContext);
   //add the flow layout to your main layout

答案 2 :(得分:0)

您必须使用创建自定义LinearLayout类。请参阅链接以获取一些示例提示。

How can I add a TextView to a LinearLayout dynamically in Android?

答案 3 :(得分:0)

您可以使用 SpannableStringBuilder TextAppearanceSpan 。示例代码:

        List<String> manyStrings = Arrays.asList(new String[]{"name", "value", "value", "value"});
        TextView textView = (TextView) view.findViewById(R.id.textView);
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
        for (int i = 0; i < manyStrings.size(); i++) {
            String text;
            if (i == 0) {
                text = manyStrings.get(i) + ": ";
            } else if (i == manyStrings.size() - 1) {
                text = manyStrings.get(i);
            } else {
                text = manyStrings.get(i) + ", ";
            }

            if (i == 0) {
                spannableStringBuilder.append(text);
                spannableStringBuilder.setSpan(new TextAppearanceSpan(getActivity(), android.R.style.TextAppearance_DeviceDefault_Large), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            } else {
                int oldLength = spannableStringBuilder.length();
                spannableStringBuilder.append(text);
                spannableStringBuilder.setSpan(new TextAppearanceSpan(getActivity(), android.R.style.TextAppearance_DeviceDefault_Small), oldLength, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }

        textView.setText(spannableStringBuilder);

详细了解 SpannableStringBuilder TextAppearanceSpan http://developer.android.com/reference/android/text/SpannableStringBuilder.html http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html

答案 4 :(得分:0)

我知道这是我很久以前问过的一个老问题,但他们(Google)使用FlexboxLayout flexWrap="wrap"属性为我们提供了解决此问题的方法。

这是针对同样问题发现此问题的其他人。

XML中的示例:

<com.google.android.flexbox.FlexboxLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:flexWrap="wrap" />

欲了解更多信息,您可以访问github repo FlexboxLayout Repo

它的工作原理如下:

enter image description here

可以在这里阅读更多内容:

Build flexible layouts with FlexboxLayout