Programing

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

lottogame 2020. 4. 22. 08:08
반응형

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


layout_weightjava 코드에서 android의 버튼 속성 값을 동적으로 어떻게 설정할 수 있습니까?


LinearLayout.LayoutParams생성자의 일부로 전달할 수 있습니다 .

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

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


사용 LinearLayout.LayoutParams:

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의 대답이 더 쉽습니다!


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 파일에서 레이아웃을 초기화하는 경우 선형 레이아웃에 새 레이아웃 매개 변수를 제공하는 것보다 훨씬 편리합니다.


의 모든 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 파일에 정의 된 새의 LayoutParams 덮어 쓰기 다른 PARAMS를 작성, 문법적으로 프로.

먼저 "getLayoutParams"를 사용한 다음 setLayoutParams를 사용해야합니다.

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


layoutparamsXML로 또는 동적으로 이미 정의 된 경우 하나의 라이너가 있습니다.

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

에서 Koltin

        val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 2.0f)

        params.weight = 1.0f
        button.layoutParams = params

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

반응형