2017-02-15 68 views
0

我想以编程方式在线性布局内添加一些文本视图。我希望这些textviews在线性布局的宽度上均匀分布,并且我希望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

你设法拉它吗? – CantThinkOfAnything

回答

0

由除了最后一个分配权重为1,所有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); 
    } 
} 
0

您应该在LinearLayout中使用权重和权重来均匀分配项目,并且您只使用权重,就我所见。如果没有适当的权重,linearlayout将不知道如何分配。

如果这不起作用,请尝试将宽度设置为0,我认为它的重量要求正常工作。但是你希望textviews有wrap_content,所以也许你应该把textview放在一个布局中,并给布局0宽度,这样你可以使你的textview wrap_content。

+1

他已经在使用权重('LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT,1f);') - 那1f是weight值 – krossovochkin

+1

@krossovochkin谢谢你指出!我编辑了这篇文章。我其实是指权重而不是重力。 – CantThinkOfAnything

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); 

希望它可以帮助

0

我想这些textviews均匀地跨线布局的宽度,分发和我想textviews包装他们的内容

针对两个矛盾的设计,TextView的宽度根据其内容(WRAP_CONTENT)设置,或者它是LinearLayout的宽度除以其中的TextViews的数量。

如果你想要一个TextView来包装它的内容,那么就像你一样在LayoutParams中定义它。 如果要划分的LinearLayout的宽度均匀即可设定的TextView的1重力,其宽度为0

BTW,textView.setTextSize(13);设置像素尺寸,因此不建议,你应该使用DP或SP代替。

0

这是不是一个好主意,你为每个项目添加保证金。它适用于少量的项目,但是如果您添加10个项目,则这些边距会过多地推送内容。

我创建了一个动态处理TextView的项目(横向和纵向)使用的LinearLayout和ConstraintLayout https://github.com/SwordArtist/DynamicEvenSpreadingView

希望它可以帮助

相关问题