IT

layout_weight 속성을 코드에서 동적으로 설정하는 방법은 무엇입니까?

itgroup 2023. 9. 5. 20:08
반응형

layout_weight 속성을 코드에서 동적으로 설정하는 방법은 무엇입니까?

속성 값을 설정하려면 어떻게 해야 합니까?layout_weight자바 코드에서 동적으로 안드로이드의 버튼을 위해?

당신은 그것을 의 일부로 전달할 수 있습니다.LinearLayout.LayoutParams생성자:

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.MATCH_PARENT,
    1.0f
);
YOUR_VIEW.setLayoutParams(param);

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

사용:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);

편집: 아, 에리히의 대답이 더 쉬워요!

레이아웃(xml) 파일에 보기를 이미 정의한 경우 프로그래밍 방식으로 가중치를 변경하는 것이 좋습니다.

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)   
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);

새로운 레이아웃 매개변수는 xml 파일에 정의된 다른 매개변수(예: 여백)를 덮어씁니다. 그렇지 않으면 레이아웃 매개변수에 모두 지정해야 합니다.

폭, 높이 및 무게를 가진 생성자가 작동하지 않으면 너비 및 높이를 가진 생성자를 사용해 보십시오.그런 다음 무게를 수동으로 설정합니다.

그리고 무게에 따라 너비를 설정하려면 생성자에서 너비를 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);

한다면layoutparams이미 정의되어 있습니다(XML 또는 동적으로). 여기 하나의 라이너가 있습니다.

((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;

답을 찾는 사용자는 다음을 사용합니다.

LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;

xml 파일에서 레이아웃을 초기화하는 경우 선형 레이아웃에 대한 새 레이아웃 매개 변수를 제공하는 것보다 훨씬 편리합니다.

다음 중 하나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똑같습니다

레이아웃(xml) 파일에 보기를 이미 정의했지만 가중치만 프로그래밍 방식으로 변경하려는 경우 새 레이아웃 매개 변수를 만들면 xml 파일에 정의된 다른 매개 변수가 덮어씁니다.

먼저 "getLayoutParams"를 사용한 다음 LayoutParams를 설정해야 합니다.

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 4f; mButton.setLayoutParams(params);

이 코드 라인을 추가하여 작업을 완료했습니다!

LinearLayout.LayoutParams mylayout = (LinearLayout.LayoutParams)   
myview.getLayoutParams();
mylayout.weight = 2;
myview.setLayoutParams(mylayout);

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

가중치를 선형 레이아웃으로 설정하려면 아래에 언급된 코드를 사용하거나 가중치를 상대 레이아웃으로 설정한 다음 상대 레이아웃으로 대체합니다.

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f

); YOUR_VIEW.setLayoutParams(파라미터);

당신은 이 방법을 시도할 수 있습니다.먼저 이 단추와 연결된 레이아웃 매개변수를 얻습니다.형식 변환을 수행합니다.

LinearLayout.LayoutParams linearLayoutParams = (LinearLayout.LayoutParams) button.getLayoutParams();

그런 다음 "weight" 매개 변수의 필요한 값을 할당합니다.

linearLayoutParams.weight = 5;

레이아웃을 다시 그립니다.

button.requestLayout();

코틀린에서는 다음과 같이 합니다.

val params = mButton.layoutParams as LinearLayout.LayoutParams
params.weight = 1.0f
mButton.layoutParams = params

언급URL : https://stackoverflow.com/questions/4641072/how-to-set-layout-weight-attribute-dynamically-from-code

반응형