프로그래밍 방식으로 TextView의 레이아웃 가중치 설정


214

동적으로 TableRow객체를 만들고에 추가하려고합니다 TableLayout. TableRow개체는이 개 항목하는이 TextView과를 CheckBox. TextView항목은 밀어 (1) 자신의 레이아웃 무게 설정이 필요 CheckBox오른쪽에 항목을.

프로그래밍 방식으로 TextView항목 의 레이아웃 가중치를 설정하는 방법에 대한 설명서를 찾을 수 없습니다 .

답변:


355

TableLayout.LayoutParams다음과 같이 사용해야 합니다.

TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));

마지막 매개 변수는 무게입니다.


15
나는 이것을 전에 언급하지 않았으므로 미안합니다. 그러나 나는 내 질문을하기 전에 이것을 시도했다. TextView가 레이아웃에서 사라집니다. 그러나 긍정적 인 점에서 TableLayout의 stretch_columns 속성을 0으로 설정하면 내가 찾고있는 효과 (왼쪽에 TextView, 오른쪽에 CheckBoxes)가 발생한다는 것을 알았습니다. 도와 주셔서 감사합니다.
eugene

8
XML 레이아웃을 가져오고 동적으로 레이아웃을 작성하지 않는 경우 다음과 같이 잡을 수 있습니다.TextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
Eric Leschinski

5
프로그래밍 방식으로 레이아웃 가중치를 설정하려면 TableRow.LayoutParams대신을 사용해야합니다 TableLayout.LayoutParams. @Dorje의 답변을 참조하십시오.
Halil

import android.widget.LinearLayout; import android.widget.TableLayout;
Prakash

1
대부분의 사람들은 0을 첫 번째 또는 두 번째 매개 변수 (가로 또는 세로에 따라 다름)로 사용하지만 WRAP_CONTENT가 아닌 가중치를 설정하기 때문에 WRAP_CONTENT가 아닙니다.
FlorianB

97

대답은 LinearLayout.LayoutParams 또는 다른 LayoutParam이 아닌 TableRow.LayoutParams를 사용해야한다는 것입니다.

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

다른 LayoutParam은 서로 바꿔 사용할 수 없으며 잘못된 것을 사용하면 아무 일도 일어나지 않는 것 같습니다. 텍스트 뷰의 부모는 테이블 행이므로 다음과 같습니다.

http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html


이 답변은 저에게 많은 도움이되었습니다 ... TableLayout은 저에게
효과적

오, 당신은 나를 너무 많은 시간을 절약했습니다. 어디에 지정되어 있습니까? 나는 당신이 교환 할 수 없다는 문서에서 아무것도 발견하지 못했습니다LayoutParams
Adrien Cadet

TableRow.LayoutParams너무 나를 위해 일을했다
Menelaos Kotsollaris

6
이 답변의 핵심 부분은 0
Leon

그것은 긴 time.Very 훌륭한 솔루션이 내 작업 time.Im의 검색을 줄일 수
SIVAKUMAR.J

38

이전 답변에서 가중치 는 새로운 SomeLayoutType.LayoutParams 객체의 생성자로 전달됩니다. 여전히 많은 경우 기존 객체를 사용하는 것이 더 편리합니다. 관심이없는 매개 변수를 처리하지 않아도됩니다.

예를 들면 :

// Get our View (TextView or anything) object:
View v = findViewById(R.id.our_view); 

// Get params:
LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams();

// Set only target params:
loparams.height = 0;
loparams.weight = 1;
v.setLayoutParams(loparams);

loparams는 NULL 일 수 있으므로 setLayoutParams ()를 호출하기 전에 확인하십시오.
AAgg

@AAgg, 실제 상황이 아닙니다. 너비와 높이가 설정되어 있지 않으면 뷰가 팽창하지 않았을 것입니다. 그러나 동의합니다-null에 대해 의심이있는 경우 확인하는 것이 좋습니다.
sberezin

16
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f는 중량 = 1로 표시되고; 2f 또는 3f를 줄 수 있습니다.보기는 공간으로 인코딩을 이동합니다.


12

그 레이아웃에서 레이아웃 매개 변수를 설정하십시오.

param 변수 만들기

 android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);

1f는 가중치 변수입니다

위젯이나 레이아웃을 다음과 같이 설정하십시오.

 TextView text = (TextView) findViewById(R.id.text);
 text.setLayoutParams(params);

1f가 가중치 변수를 의미한다는이 정보를 어디서 얻습니까? 당신은 링크를 제공 할 수 있습니까?
hayonj

@hayonj는 LinearLayout.LayoutParams생성자의 소스를 확인합니다 . 세 번째 매개 변수는 무게입니다. 또는 설명서
mente

11
TextView text = new TextView(v.getContext());
text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                                LayoutParams.WRAP_CONTENT, 1f));

(또는)

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

1f는 중량 = 1로 지칭되고; 필요에 따라 2f 또는 3f를 줄 수 있습니다.보기는 공간으로 인코딩을 이동합니다. 선형 레이아웃에서 뷰 간 거리를 지정하려면 "LinearLayout"에 가중치 를 사용 하십시오 .

LinearLayout ll_Outer= (LinearLayout ) view.findViewById(R.id.linearview);
LinearLayout llInner = new LinearLayout(this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
            llInner.Orientation = Orientation.Horizontal;
            llInner.WeightSum = 2;
            ll_Outer.AddView(llInner);

8

이것은 당신에게 작동합니다

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);

param.weight=1.0f;

7

이처럼 별도로 무게를 줄 수도 있습니다.

LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

 lp1.weight=1;

6

이것은 나를 위해 일하고, 그것이 당신에게도 효과가 있기를 바랍니다.

상위 뷰의 LayoutParams를 먼저 설정하십시오.

myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.FILL_PARENT));

그런 다음 TextView (자식)로 설정하십시오.

 TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams
     (TableLayout.LayoutParams.WRAP_CONTENT,
     TableLayout.LayoutParams.WRAP_CONTENT,1f);
     //-- set components margins
     textViewParam.setMargins(5, 0, 5,0);
     myTextView.setLayoutParams(textViewParam); 

1

다른 방법이 있습니다. 하나의 매개 변수 만 설정해야하는 경우 (예 : 'height') :

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

1

4 시간 동안 고군분투 한 후 마지막 으로이 코드는 저에게 효과적이었습니다.

3 열이 행에 있습니다.

  TextView serialno = new TextView(UsersActivity.this);
  TextView userId = new TextView(UsersActivity.this);
  TextView name = new TextView(UsersActivity.this);

  serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

-1

나는 매우 비슷한 해결책으로 상당히 어려움을 겪었습니다 .TableRow에 두 개의 버튼이 있고 각 버튼은 화면 너비의 절반입니다. 어떤 이유로 든 왼쪽 버튼은 항상 너비의 약 70 %이고 오른쪽 버튼은 30 %입니다. table_layout.setStretchAllColumns (true)를 호출해도 효과가 없었으며 버튼의 너비를 화면의 절반으로 설정하거나 레이아웃 가중치를 설정하지 않았습니다.

나는 TableRows,에있는 LinearLayout 중첩 된로 결국 해결책 않은 계정에 버튼 '폭의 값을.

    TableLayout layout = new TableLayout(this);
    TableRow top_row = new TableRow(this);
    left_button = styleButton();
    right_button = styleButton();
    LinearLayout toprow_layout = new LinearLayout (this);
    toprow_layout.setOrientation(LinearLayout.HORIZONTAL);
    toprow_layout.addView (left_button);
    toprow_layout.addView(right_button);
    toprow.addView(top_layout);
    layout.addView(top_row)

    private Button styleButton() {
            Button btn = new Button (this);
            android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();      
            btn.setWidth((int)(display.getWidth()/2));    // set width to half
            btn.setHeight(((int)display.getHeight()/6));  // set height to whatevs
            btn.setText("foo");
            return btn;
        }

1
미래를 알기 위해 해결책은 TableRow, Button1 및 Button2를 모두 have로 layout_width=fill_parent설정하고 그 후에 layout_weight=1button1과 button2 모두를 설정하는 것 입니다. fill_parent 및 layout_weight = 1 인 모든 요소는 인플레이션시 크기가 동일합니다.
edthethird
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.