itsource

런타임에 보기를 다른 보기로 대체하는 Android 레이아웃

mycopycode 2023. 8. 25. 23:33
반응형

런타임에 보기를 다른 보기로 대체하는 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

반응형