텍스트 보기의 레이아웃 가중치를 프로그래밍 방식으로 설정
동적으로 생성하려는 중입니다.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
'programing' 카테고리의 다른 글
Oracle의 INSTRECT의 반대쪽 (0) | 2023.09.09 |
---|---|
관리되지 않는 C++의 XLL Excel 추가 기능 (0) | 2023.09.04 |
Grafana - 확대 시 데이터 없음 (0) | 2023.09.04 |
powershell에서 csv 파일의 처음 10줄만 추출 (0) | 2023.09.04 |
Swift에서 클래스를 프로토콜에 맞게 만드는 방법은 무엇입니까? (0) | 2023.09.04 |