layout_weight
java 코드에서 android의 버튼 속성 값을 동적으로 어떻게 설정할 수 있습니까?
layout_weight
java 코드에서 android의 버튼 속성 값을 동적으로 어떻게 설정할 수 있습니까?
답변:
LinearLayout.LayoutParams
생성자의 일부로 전달할 수 있습니다 .
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
마지막 매개 변수는 무게입니다.
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1f
소수점 이하 자리가없는 경우 더 간단 합니다
Relative
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);
편집 : 아, Erich의 대답이 더 쉽습니다!
FILL_PARENT
더 이상 사용되지 않으며 MATCH_PARENT
대신 사용해야합니다.
MATCH_PARENT
대신 사용할 수 있습니다 FILL_PARENT
심지어 오래된 장치.
FILL_PARENT
vs에 대해 걱정하기 전에 다른 많은 문제가 발생할 수 MATCH_PARENT
있습니다.
layout (xml) 파일에서 이미 뷰를 정의한 경우 프로그래밍 방식으로 가중치 만 변경하려는 경우이 방법이 더 좋습니다.
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
새로운 LayoutParams는 여백과 같이 XML 파일에 정의 된 다른 매개 변수를 덮어 쓰거나 LayoutParams에서 모든 매개 변수를 지정해야합니다.
너비, 높이 및 무게가있는 생성자가 작동하지 않으면 너비와 높이가있는 생성자를 사용하십시오. 그런 다음 수동으로 무게를 설정하십시오.
가중치에 따라 너비를 설정하려면 생성자에서 너비를 0으로 설정하십시오. 높이도 마찬가지입니다. 아래 코드는 저에게 효과적입니다.
LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);
LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam2.weight = 0.7f;
child2.setLayoutParams(childParam2);
parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);
누군가 답을 찾고 있다면 이것을 사용하십시오.
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
xml 파일에서 레이아웃을 초기화하는 경우 선형 레이아웃에 새 레이아웃 매개 변수를 제공하는 것보다 훨씬 편리합니다.
layout_weight
가 이미 배치 된 경우 View.requestLayout()
업데이트 를 위해 전화해야합니다 .
의 모든 LinearLayout.LayoutParams
과가 TableLayout.LayoutParams
바로 하나가 버튼에, 날 위해 일했습니다 TableRow.LayoutParams
. 그건:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
사용 MATCH_PARENT
하거나 WRAP_CONTENT
동일합니다.
FILL_PARENT
더 이상 사용되지 않으며 MATCH_PARENT
대신 사용해야합니다.
LayoutParams
은 직접 부모의 전화 . LinearLayout.LayoutParams
부모님없이 충돌을 시도했다고 가정합니다 LinearLayout
.
이 경우 이미 레이아웃 (XML) 파일에보기를 정의 만 무게를 변경하려면 다음 다음 XML 파일에 정의 된 새의 LayoutParams 덮어 쓰기 다른 PARAMS를 작성, 문법적으로 프로.
먼저 "getLayoutParams"를 사용한 다음 setLayoutParams를 사용해야합니다.
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
layoutparams
XML로 또는 동적으로 이미 정의 된 경우 하나의 라이너가 있습니다.
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
Kotlin을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.
import android.content.Context
import android.support.v4.content.ContextCompat
import android.support.v7.widget.CardView
import android.widget.*
import android.widget.LinearLayout
class RespondTo : CardView {
constructor(context: Context) : super(context) {
init(context)
}
private fun init(context: Context) {
val parent = LinearLayout(context)
parent.apply {
layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply {
orientation = LinearLayout.HORIZONTAL
addView(EditText(context).apply {
id = generateViewId()
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply {
}
})
addView(ImageButton(context).apply({
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)
background = null
setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px))
id = generateViewId()
layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT).apply {
addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
// addRule(RelativeLayout.LEFT_OF, myImageButton.id)
}
}))
}
}
this.addView(parent)
}
}