반응형
런타임에 보기를 다른 보기로 대체하는 Android 레이아웃
나는 있습니다xml
- 레이아웃 파일 메인에 두 개의 텍스트 보기 A/B와 보기 C가 있습니다.나는 다른 두 명이 있습니다.xml
-파일 검색option1
그리고.option2
다음 중 하나라도 로드할 수 있습니까?option1
또는option2
자바를 통해 C로 런타임에?그렇다면 어떤 기능을 사용해야 합니까?
언제든지 보기를 바꿀 수 있습니다.
int optionId = someExpression ? R.layout.option1 : R.layout.option2;
View C = findViewById(R.id.C);
ViewGroup parent = (ViewGroup) C.getParent();
int index = parent.indexOfChild(C);
parent.removeView(C);
C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
이미 존재하는 보기를 바꾸지 않고 초기화 시 옵션 1/옵션 2 중 하나를 선택하려면 더 쉽게 설정할 수 있습니다.android:id
상위 레이아웃의 경우 다음을 수행합니다.
ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);
보기 구조에 따라 "index"를 적절한 값으로 설정해야 합니다.ViewStub을 사용할 수도 있습니다. C 보기를 ViewStub으로 추가한 후 다음 작업을 수행합니다.
ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();
이렇게 하면 XML 레이아웃을 재구성하려는 경우 위의 "index" 값에 대해 걱정할 필요가 없습니다.
자주 사용하는 경우 ViewSwitcher 또는 ViewFlipper를 사용하여 보기를 쉽게 대체할 수 있습니다.
private void replaceView(View oldV,View newV){
ViewGroup par = (ViewGroup)oldV.getParent();
if(par == null){return;}
int i1 = par.indexOfChild(oldV);
par.removeViewAt(i1);
par.addView(newV,i1);
}
이전 센서 및 newSnsor - 이전 보기 및 새 보기:
private void replaceSensors(View oldSensor, View newSensor) {
ViewGroup parent = (ViewGroup) oldSensor.getParent();
if (parent == null) {
return;
}
int indexOldSensor = parent.indexOfChild(oldSensor);
int indexNewSensor = parent.indexOfChild(newSensor);
parent.removeView(oldSensor);
parent.addView(oldSensor, indexNewSensor);
parent.removeView(newSensor);
parent.addView(newSensor, indexOldSensor);
}
언급URL : https://stackoverflow.com/questions/3334048/android-layout-replacing-a-view-with-another-view-on-run-time
반응형
'itsource' 카테고리의 다른 글
mariadb 드라이버가 있는 Springboot 2.5.x 이상은 java.sql을 제공합니다.SQL 비일시적 연결예외: (vmx=11812758) 연결이 닫혔습니다. (0) | 2023.08.25 |
---|---|
터미널에서 현재 분기 및 폴더 경로를 표시하려면 어떻게 해야 합니까? (0) | 2023.08.25 |
socket.io 을 확장하려면 어떻게 해야 합니까? (0) | 2023.08.25 |
jQuery - document.getElementById("selectlist").value를 사용하여 이 작업을 수행하는 방법 (0) | 2023.08.25 |
크롬의 입력 강조 표시/초점 테두리를 재설정/제거하는 방법은 무엇입니까? (0) | 2023.08.25 |