均匀地在水平线性布局中分布文本视图并包装内容

时间:2017-02-15 12:25:13

标签: android android-layout

我想以编程方式在线性布局中添加一些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);

5 个答案:

答案 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);
    }
}