我找到了几种方法,但我的问题是我的代码必须是具有水平方向的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-- |
我需要的是:
名称:值,值(未知数值)
但如果它太宽,我需要它去屏幕的下一行:
| 名称:值,值,值,--- |
|价值,价值,价值。 ------------ |
希望你能理解我的需要吗?
答案 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
它的工作原理如下:
可以在这里阅读更多内容: