我想以编程方式在线性布局中添加一些textview。我希望这些文本视图在线性布局的宽度上均匀分布,我希望textviews包装其内容。
我创建了类似的文本视图,但是他们不会包装他们的内容。
LinearLayout linearLayout = new LinearLayout(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM;
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
params.setMargins(40, 0, 0, 0);
linearLayout.setLayoutParams(params);
// linearLayout.setGravity(Gravity.BOTTOM);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
for(String label: labels) {
TextView textView = new TextView(mContext);
textView.setText(label.trim());
textView.setTextSize(13);
textView.setBackgroundColor(Color.GREEN);
textView.setTextColor(R.color.labels_color);
LinearLayout.LayoutParams mlp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
mlp.setMargins(0,0,20,0);
textView.setLayoutParams(mlp);
linearLayout.addView(textView);
}
chartWrapper.addView(linearLayout);
答案 0 :(得分:0)
您应该使用权重和权重与LinearLayout均匀分配项目,并且您只使用权重我可以看到。没有适当的权重,线性布局将不知道如何分配。
如果这不起作用,请尝试将宽度设置为0,我认为它是权重的要求才能正常工作。但是你希望你的textviews有wrap_content所以也许你应该把textview放在一个布局中,并给布局0宽度,这样你就可以使你的textview wrap_content。
答案 1 :(得分:0)
尝试代替
LinearLayout.LayoutParams mlp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
使用零作为宽度:
LinearLayout.LayoutParams mlp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
希望有所帮助
答案 2 :(得分:0)
我希望这些文本视图在线性布局的宽度上均匀分布,我希望textviews包装其内容
你的目标是两个相互矛盾的设计,要么TextView的宽度是根据其内容(WRAP_CONTENT),要么是LinearLayout的宽度除以其中的TextViews的数量。
如果你想让TextView包装它的内容,那么就像你一样在LayoutParams中定义它。 如果要均匀划分LinearLayout的宽度,请将TextView的重力设置为1,将其宽度设置为0.
BTW,textView.setTextSize(13);
设置大小(以像素为单位),不建议使用dp或sp代替。
答案 3 :(得分:0)
为每件商品添加保证金并不是一个好主意。它适用于少量项目,但是如果你添加10个项目,那么这些边距会过多地推送内容。
我使用LinearLayout和ConstraintLayout创建了一个动态处理textview(横向和纵向)的项目 https://github.com/SwordArtist/DynamicEvenSpreadingView
希望有所帮助
答案 4 :(得分:0)
通过为除最后一个TextView之外的所有TextView分配权重1来修复它。
public void drawLabels(List<String> labelsValues, ViewGroup container) {
for (int i = 0; i < labelsValues.size(); i++) {
String label = labelsValues.get(i);
TextView textView = new TextView(mContext);
textView.setText(label.trim());
if (i == labelsValues.size() - 1) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(params);
} else {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
textView.setLayoutParams(params);
}
container.addView(textView);
}
}