Android programmatically include layout (i.e. without XML)

Jon Willis picture Jon Willis · Jul 7, 2010 · Viewed 59.5k times · Source

So I've created an Activity subclass called CustomTitlebarActivity. Essentially, each main activity in my app will have a custom titlebar with many common features such as a Home button, a title, a search button, etc. In my current implementation, I am still explicitly using an include statement in the layout XML for each CustomTitlebarActivity:

<include layout="@layout/titlebar" />

It seems natural that I should be able to do this within CustomTitlebarActivity. I have two questions: What code can replace this include tag, and where should I put the code? (My first instinct would be to put it in CustomTitlebarActivity's setContentView method.)

On a related note, I would appreciate insight into better ways to reuse android UI code (even if, per se, the titlebars need to vary slightly between activities.)

Answer

acoustic picture acoustic · Aug 29, 2012

I met this issue too, and I just solved it now. I think my solution is easier:

  1. create a inflater:

    LayoutInflater inflater = (LayoutInflater)      this.getSystemService(LAYOUT_INFLATER_SERVICE);
    
  2. inflate the child layout:

    View childLayout = inflater.inflate(R.layout.child,
                (ViewGroup) findViewById(R.id.child_id));
    
  3. add it into parent:

    parentLayout.addView(childLayout);
    

It's done, enjoy it!