コードでTextViewのwrap_contentに幅を設定する


91

XMLからではなくコードTextViewwrap_content介しての幅を設定する方法を誰かが私に手伝ってくれる?

私は動的TextViewにコードを作成していますので、コードwrap_contentを通じてその幅を設定する方法はありますか?

回答:


126
TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

ConstraintLayoutなどの他のレイアウトではLayoutParams、次のように独自のがあります。

pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

または

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
フランシスココラレスモラレス2014

まあ、主な違いは、最初のコードで、その設定で新しいTextViewを既に作成していることです。2つ目は、既存のビューに追加し、それらのパラメーターを設定します。キャストの問題については、適切なクラスをキャストする必要があると思います
Franco

77

同じ結果を得る別の方法があります。たとえば「height」など、1つのパラメータのみを設定する必要がある場合:

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

これはうまくいきます。これが行われる場合、LinearLayoutそれll.invalidate()は必要ではないようです。どうして?
ミディライター

1
私たちは知っていることは決してないだろうと思います
デニー

49

コンテンツTextViewラップするために幅を変更するためのソリューション。

textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
textView.requestLayout();  
// Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
// If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()

// Another useful example
// textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel

6
他のパラメータを上書きしないため、シンプルで正しいソリューション。
CoolMind 2017

2
これははるかに簡単なので、削除のために私の回答をマークしました。
フランククルノウ2017

2
これが最善の解決策です
pedram shabani 2017年

4

私はAndroid Javaベースの複数行のedittextを投稿しています。

EditText editText = findViewById(R.id.editText);/* edittext access */

ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setLayoutParams(params); /* Gives as much height for multi line*/

editText.setSingleLine(false); /* Makes it Multi line */

1

このコードはあなたの質問に答えると思います

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.