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
'development' 카테고리의 다른 글
Slim PHP 및 GET 매개 변수 (0) | 2020.12.28 |
---|---|
html에서 ► 재생 (앞으로) 또는 단색 오른쪽 화살표 기호를 어떻게 표시합니까? (0) | 2020.12.28 |
Asp.Net VNext를 사용할 때 application / font-woff2가 작동하지 않음 (0) | 2020.12.28 |
ANTLR4로 AST를 만드는 방법은 무엇입니까? (0) | 2020.12.28 |
Docker가 변경된 경우에만 pip requirements.txt를 실행하는 방법은 무엇입니까? (0) | 2020.12.28 |