1

Forgive me if this is a simple question however I am new to Android Development and this problem has been bugging me.

I have a "base" layout file which contains a RelativeLayout and a com.devspark.sidenavigation.SideNavigationView from this library.

I then have an activity with a ViewPager which inflates other layouts (containing ListViews and progressBars) into this. My issue is that however I try and do it, the SideNavigationMenu always appears behind the inflated listviews. I'm not sure what's going wrong and I'm getting lost in a mess of Layouts. Does anyone have any pointers?

Here is my "base" layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NewNews"
    tools:ignore="MergeRootFrame">  

<com.devspark.sidenavigation.SideNavigationView
    android:id="@+id/side_navigation_view_news"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"/>

</RelativeLayout>

and an example of one of the "sub"-layouts which are inflated:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<eu.erikw.PullToRefreshListView
    android:id="@+id/listView_all"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"/>

<ProgressBar
    android:id="@+id/progressBar_all"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

</FrameLayout>

Thanks in advance

MattWilliams89
  • 157
  • 1
  • 15

2 Answers2

3

Relative layout doesn't support layers.

Views are placed on top of each other by the order they are added to the layout.

e.g.

  • add viewA to relativelayout
  • add viewB to relativelayout
  • viewB will be infront of viewA

One way to inflate "behind" is inflating the other view before the other one is inflated.

  • add viewB to relativelayout
  • add viewA to relativelayout
  • viewA will be infront of viewB

or remove the view and re-add it to the relativelayout

  • add viewA to relativelayout
  • add viewB to relativelayout
  • remove viewA
  • re-add viewA
  • viewA will be infront of viewB
Tobrun
  • 18,291
  • 10
  • 66
  • 81
  • 1
    That did it. I was getting confused as I was doing my adding inside onCreateView(). The return statement of this adds a view to the layout and so making that return the sidemenu and doing the adding/removing before worked. Thanks a lot! – MattWilliams89 Feb 12 '13 at 16:11
2

I did it like this:

parentView.addView(childView, 0);

Second parameter is index, the position at which to add the child

here second parameter is passed at 0 which makes the child view to be added in the back of views already present.

Amit Kumar
  • 2,685
  • 2
  • 37
  • 72