我想以编程的方式在线性布局中添加一些文本视图。我希望这些文本视图能够均匀地分布在线性布局的宽度上,并且希望文本视图能够包装它们的内容。
我创建这样的文本视图,但它们没有包装它们的内容。
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);发布于 2017-05-16 09:03:10
修正了把权重分配给所有的TextViews,除了最后一个。
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);
}
}发布于 2017-02-15 12:29:53
您应该使用加权和LinearLayout来均匀地分配项目,而且据我所见,您只使用了权重。如果没有适当的权重和,线性布局将不知道如何分配。
如果这不起作用,试着将宽度设置为0,我认为这是对体重正常工作的要求。但是您希望文本视图具有wrap_content,所以您可能应该将文本视图放在布局中,并将布局设置为0宽度,这样您就可以生成文本视图wrap_content。
发布于 2017-02-15 12:38:16
试着而不是
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);希望它能帮上忙
https://stackoverflow.com/questions/42249362
复制相似问题