programing

프로그램적으로 뷰를 뷰에 추가하는 방법

newnotes 2023. 9. 7. 22:00
반응형

프로그램적으로 뷰를 뷰에 추가하는 방법

예를 들면 제가.LinearLayout, 자바 코드에서 내 프로그램에 뷰를 추가하고 싶습니다.이것에는 어떤 방법이 사용됩니까?XML로 어떻게 처리되는지 묻는 것이 아니라 이 샘플 코드의 행에 따라 어떻게 해야 합니까?

(One View).add(Another View)

스윙에서 할 수 있는 것처럼.

부르기addView정답이지만, 그 이상의 작업을 해야 작동할 수 있습니다.

생성자를 통해 뷰를 작성하는 경우(예:Button myButton = new Button();), 전화를 해야 합니다.setLayoutParams새로 구성된 뷰에서 새로 구성된 자식을 부모 뷰에 추가하기 전에 부모 뷰의 LayoutParams 내부 클래스의 인스턴스를 전달합니다.

예를 들어, 당신의 컴퓨터에 다음과 같은 코드가 있을 수 있습니다.onCreate()함수 선형 배치에 ID가 있다고 가정합니다.R.id.main:

LinearLayout myLayout = findViewById(R.id.main);

Button myButton = new Button(this);
myButton.setLayoutParams(new LinearLayout.LayoutParams(
                                     LinearLayout.LayoutParams.MATCH_PARENT,
                                     LinearLayout.LayoutParams.MATCH_PARENT));

myLayout.addView(myButton);

LayoutParams(레이아웃 파라미터)를 설정해야 합니다.모든 뷰에는 layout_width와 layout_height 매개변수가 필요합니다.또한 올바른 이너 클래스를 얻는 것도 중요합니다.테이블 로우의 인스턴스를 통과하지 못하는 것을 확인할 때까지 보기를 테이블 로우에 추가하여 제대로 표시하는 데 어려움을 겪었습니다.LayoutParams to the child view의 set LayoutParams.

제가 찾은 가장 좋은 방법은 뷰의 팽창 정적 방법을 사용하는 것입니다.

View inflatedView = View.inflate(context, yourViewXML, yourLinearLayout);

여기서 당신의 ViewXML은 R.layout.m과 같은 것입니다.yView

뷰를 추가하려면 ViewGroup(보기 그룹)이 필요합니다(생각할 수 있는 모든 레이아웃).

예를 들어, 보기에 이미 부풀려진 조각이 있고 루트 뷰가 레이아웃이라는 것을 알고 있으며 보기를 추가하려고 합니다.

    View view = getView(); // returns base view of the fragment
    if (view == null)
        return;
    if (!(view instanceof ViewGroup))
        return;

    ViewGroup viewGroup = (ViewGroup) view;
    View popup = View.inflate(viewGroup.getContext(), R.layout.someView, viewGroup);

편집:

위 예제에 대한 Kotlin 코드(보기는 fragment의 getView())입니다.

(view as? ViewGroup)?.let {
        View.inflate(context, R.layout.add_credit_card, it)
}

보기를 프로그래밍 방식으로 추가하려면 다음 작업을 수행할 수 있습니다.

LinearLayout rlmain = new LinearLayout(this);      
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);          
LinearLayout   ll1 = new LinearLayout (this);
                        
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.logo);              
LinearLayout .LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
            
iv.setLayoutParams(lp);
ll1.addView(iv);
rlmain.addView(ll1);              
setContentView(rlmain, llp);

보기를 원하는 개수로 추가할 수도 있습니다.

LinearLayoutView 그룹의 하위 클래스로 addView라는 메서드가 있습니다.addView 메서드는 원하는 것이어야 합니다.

제약 조건을 프로그램적으로 설정하는 것은 귀찮을 수 있습니다.아래의 솔루션은 제약 조건, 선형 등의 모든 레이아웃에 적용됩니다.가장 좋은 방법은 적절한 제약 조건(또는 선형과 같은 다른 레이아웃에 적절한 배치)을 가진 자리 표시자(즉, 선형과 같은 다른 레이아웃에 적절한 배치)를 프로그래밍 방식으로 작성된 뷰가 가질 위치에 설정하는 것입니다.

을 하여 를 으로 만 를 으로 만 으로 을 하여 를 를 으로 addChild()방법.그러면 실행 중에 보기가 부풀려져서 올바른 위치에 놓이게 됩니다.Android 권장 사항에 따라 프레임 레이아웃 [링크]에 하나의 하위 보기만 추가해야 합니다.

특정 위치에서 프로그래밍 방식으로 TextView를 생성하고자 할 경우 코드의 모양은 다음과 같습니다.

1단계:

확장할 뷰를 포함하는 레이아웃에서 프레임 레이아웃을 올바른 위치에 배치하고 ID를 지정합니다("container").

2단계 런타임 중에 확장할 보기로 루트 요소가 있는 레이아웃을 만들고 레이아웃 파일을 "textview.xml"이라고 부릅니다.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

</TextView>

그건 그렇고, frameLayout의 layout-params를 wrap_content로 설정하면 항상 프레임 레이아웃이 부모의 활동, 즉 전화 화면만큼 커집니다.

android:layout_width="wrap_content"
android:layout_height="wrap_content"

설정하지 않으면 기본적으로 프레임의 하위 보기가 프레임 레이아웃의 왼쪽 상단으로 이동하므로 보기가 화면의 왼쪽 상단으로 이동합니다.

3단계

onCreatemethod이 작업을 합니다 d,을:

FrameLayout frameLayout = findViewById(R.id.container);
                TextView textView = (TextView) View.inflate(this, R.layout.textview, null);
                frameLayout.addView(textView);

(의은 ( 은 하는 를 은 하는 findViewByIdnull전화를 걸어 보기를 추가합니다.addView()컨테이너 뷰(frameLayout) 상에서(frameLayout)는 단순히 다음을 통과하여 팽창된 뷰를 부착하는 것과 같습니다.true세째개서서개의 세 번째 findViewById(). 자세한 내용은 이 항목을 참조하십시오.)

활동에서 보기를 추가하는 한 가지 방법

ViewGroup rootLayout = findViewById(android.R.id.content);
rootLayout.addView(view);

당신들도 당신들이 그들을 무시할 때onLayout에게 전화를 .super.onLayout모든 속성을 사용할 수 있습니다. 그렇지 않으면 뷰가 부풀지 않습니다!

언급URL : https://stackoverflow.com/questions/2395769/how-to-programmatically-add-views-to-views

반응형