development

Android에서 View Stub을 사용하는 방법

big-blog 2020. 12. 28. 22:27
반응형

Android에서 View Stub을 사용하는 방법


Android에서 ViewStub을 사용하고 싶기 때문에 도와주세요. 내가 만들었다

ViewStub stub = new ViewStub;
View inflated = stub.inflate(); 

프로그래밍 방식으로 사용하는 방법?


문서에서 말한 것처럼 느리게 부풀려 ViewStub지는 View입니다.

다음 ViewStub과 같이 XML 파일에서 선언 할 수 있습니다 .

 <ViewStub android:id="@+id/stub"
           android:inflatedId="@+id/subTree"
           android:layout="@layout/mySubTree"
           android:layout_width="120dip"
           android:layout_height="40dip" />

android:layout속성은에 대한 참조 View의 전화 옆에 팽창 할 것이다 inflate(). 그래서

ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

메서드 inflate()가 호출되면는 ViewStub부모에서 제거되고 오른쪽 View( mySubTree레이아웃 의 루트보기)으로 대체됩니다 .

이 작업을 프로그래밍 방식으로 수행하려면 코드는 다음과 같아야합니다.

ViewStub stub = new ViewStub(this);
stub.setLayoutResource(R.layout.mySubTree);
stub.inflate(); 

단순히 ViewStub을 사용하여 레이아웃 렌더링의 효율성을 높입니다. ViewStub을 사용하면 수동으로 뷰를 만들 수 있지만 뷰 계층에 추가 할 수는 없습니다. 런타임에 쉽게 확장 될 수 있지만 ViewStub이 확장되는 동안 viewtub의 콘텐츠는 viewtub에 정의 된 레이아웃으로 대체됩니다.

activity_main.xml 우리는 viewstub을 정의했지만 먼저 생성하지 않았습니다.여기에 이미지 설명 입력

간단한 예는 더 나은 이해를 제공합니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="create the view stub" />
     <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hide the stub." />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <ViewStub
            android:id="@+id/stub_import"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:inflatedId="@+id/content_import"
            android:layout="@layout/splash" />
    </RelativeLayout>
</LinearLayout>

런타임에 팽창 할 때 콘텐츠는 viewtub에 정의 된 레이아웃으로 대체됩니다.

public class MainActivity extends Activity {

    Button b1 = null;
    Button b2 = null;

    ViewStub stub = null;
    TextView tx = null;

    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b1 = (Button) findViewById(R.id.btn1);
        b2 = (Button) findViewById(R.id.btn2);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (stub == null) {     
                    stub = (ViewStub) findViewById(R.id.stub_import);
                    View inflated = stub.inflate();
                    tx = (TextView) inflated.findViewById(R.id.text1);
                    tx.setText("thanks a lot my friend..");
                } 

            }
        });

        b2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (stub != null) {
                    stub.setVisibility(View.GONE);
                }

            }
        });

    }

여기에 이미지 설명 입력

이제 뷰 계층 구조를 다시 살펴 보겠습니다.

여기에 이미지 설명 입력

viewtub을 확장하면 view 계층 구조에서 제거됩니다.


다음은 ViewStub런타임에 데이터를 표시 / 숨기기 및 변경하는 예입니다.

activity_main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/buttonShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show View Stub"/>

    <Button
        android:id="@+id/buttonHide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hide View Stub"/>

    <ViewStub
        android:id="@+id/viewStub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout="@layout/layout_of_view_stub"
        />

</LinearLayout>

layout_of_view_stub.xml

<TextView
    android:id="@+id/textInViewStub"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ViewStub Button"
    />

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private ViewStub viewStub;
    private Button buttonShow;
    private Button buttonHide;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonShow = findViewById(R.id.buttonShow);
        buttonHide = findViewById(R.id.buttonHide);
        buttonShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showViewStub();
            }
        });

        buttonHide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideViewStub();
            }
        });
    }

    private void showViewStub() {
        if (viewStub == null) {
            viewStub = findViewById(R.id.viewStub);

            // If you want to change data of ViewStub at runtime, you can do like this
            View inflatedView = viewStub.inflate();
            TextView textViewInViewStub = inflatedView.findViewById(R.id.textInViewStub);
            textViewInViewStub.setText("ABC");
        }
        viewStub.setVisibility(View.VISIBLE);
    }

    private void hideViewStub() {
        if (viewStub == null) {
            return;
        }
        viewStub.setVisibility(View.GONE);
    }
}

참조 URL : https://stackoverflow.com/questions/11577777/how-to-use-view-stub-in-android

반응형