2017-02-15 6 views
0

線形レイアウト内にいくつかのテキストビューをプログラムで追加します。私は、これらのtextviewsが線形レイアウトの幅に均等に分散したいと思って、私は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に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); 
    } 
} 
0

アイテムを均等に分配するには、体重と体重をLinearLayoutで使用する必要があります。表示できる範囲で体重を使用しています。適切な重みがなければ、線形レイアウトはどのように配布するかを知りません。

それがうまくいかない場合は、幅を0に設定してみてください。私はその重量が適切に機能すると思っています。しかし、あなたのtextviewsにwrap_contentを持たせてもらいたいのであれば、textviewをレイアウトに入れ、レイアウトを0幅にしてtextviewをwrap_contentにする必要があります。

+1

彼は既にウェイトを使用しています( 'new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT、LinearLayout.LayoutParams.WRAP_CONTENT、1f);) - 1fはウェイト値 – 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); 

が、それは私がこれらのtextviewsが均等に線形レイアウトの幅を横切って配布したい

0

を役に立てば幸いし、テキストビューでコンテンツをラップしたい場合

TextViewの幅は内容(WRAP_CONTENT)によるか、またはLinearLayoutの幅をその内部のTextView数で割ったものです。

TextViewでコンテンツをラップする場合は、そのままLayoutParamsで定義します。 あなたが均等に、その後のLinearLayoutの幅を分割したい場合は、ピクセル単位でサイズを設定し、推奨されませんtextView.setTextSize(13);、BTW 0

に1へのTextViewとその幅の重力を設定し、あなたは、DPまたはSPを使用する必要があります代わりに。

0

各アイテムに余白を追加することはお勧めできません。それは少数のアイテムで機能しますが、10アイテムのように追加すると、余白があまりにも多くなります。

私はhttps://github.com/SwordArtist/DynamicEvenSpreadingView

をのLinearLayoutを使って動的のTextViewを扱うプロジェクト(風景やポートレート)を作成し、ConstraintLayout はそれが

関連する問題