programing

텍스트 보기의 레이아웃 가중치를 프로그래밍 방식으로 설정

instargram 2023. 9. 4. 19:33
반응형

텍스트 보기의 레이아웃 가중치를 프로그래밍 방식으로 설정

동적으로 생성하려는 중입니다.TableRow개체를 에 추가합니다.TableLayout.그TableRow객체에는 2개의 항목이 있습니다.TextView그리고 aCheckBox.그TextView항목을 푸시하려면 레이아웃 가중치를 1로 설정해야 합니다.CheckBox맨 오른쪽에 있는 항목

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

사용해야 합니다.TableLayout.LayoutParams다음과 같은 것으로:

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

마지막 매개 변수는 가중치입니다.

정답은 TableRow를 사용해야 한다는 것입니다.선형 레이아웃이 아닌 레이아웃 매개변수입니다.LayoutParams 또는 다른 LayoutParams(레이아웃 매개 변수)

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

서로 다른 레이아웃 매개 변수는 서로 교환할 수 없으며 잘못된 매개 변수를 사용하면 아무 일도 일어나지 않는 것 같습니다.텍스트 뷰의 부모는 테이블 행이므로 다음과 같습니다.

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

앞의 답변에서 가중치는 새 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);
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f는 가중치=1로 표시됩니다. 2f 또는 3f를 지정할 수 있습니다. 공간에 따라 뷰가 이동합니다.

다음과 같이 해당 레이아웃에 레이아웃 매개변수를 설정합니다.

매개 변수 생성

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

이것은 당신에게 효과가 있을 것입니다.

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

param.weight=1.0f;

이렇게 따로 무게를 줄 수도 있고,

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

 lp1.weight=1;

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

상위 보기에 대한 레이아웃 파라미터를 먼저 설정합니다.

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

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

이것을 할 수 있는 다른 것이 있습니다.파라미터를 하나만 설정해야 하는 경우(예: '높이'):

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

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

결국 해결책은 버튼의 너비 값을 고려하여 테이블 행에 선형 레이아웃을 중첩하는 것이었습니다.

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

언급URL : https://stackoverflow.com/questions/3224193/set-the-layout-weight-of-a-textview-programmatically

반응형