2017-02-15 66 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

希望它可以幫助