Android layout replacing a view with another view on run time Android layout replacing a view with another view on run time xml xml

Android layout replacing a view with another view on run time


You could replace any view at any time.

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);

If you don't want to replace already existing View, but choose between option1/option2 at initialization time, then you could do this easier: set android:id for parent layout and then:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent);View C = getLayoutInflater().inflate(optionId, parent, false);parent.addView(C, index);

You will have to set "index" to proper value depending on views structure. You could also use a ViewStub: add your C view as ViewStub and then:

ViewStub C = (ViewStub) findViewById(R.id.C);C.setLayoutResource(optionId);C.inflate();

That way you won't have to worry about above "index" value if you will want to restructure your XML layout.


And if you do that very often, you could use a ViewSwitcher or a ViewFlipper to ease view substitution.


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);    }