I know that it's already late, but I am already a developer of 8tracks. The (old) 2.x application you mentioned above is being overwritten, but I can show you what the old developer did for the profile page.
Before moving on to this, I must say that this is not the best way to do this, but the 8tracks (2.x) application is deprecated.
So, back to the code ... ProfileActivity contains ProfileFragment .
The main layout that you see using the Follow button (and profile image) is as follows:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dip" > <com.gdub.widget.ImageViewClickable android:id="@+id/dj_avatar" android:layout_width="110dip" android:layout_height="110dip" android:layout_marginRight="10dip" android:background="@drawable/default_avatar_max200" android:scaleType="centerCrop" /> <com.gdub.widget.CollapsingTextView android:id="@+id/dj_location" style="@style/mix.counts" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dip" android:layout_toRightOf="@id/dj_avatar" /> <ViewSwitcher android:id="@+id/profile_action_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/dj_location" android:layout_toRightOf="@id/dj_avatar" > <Button android:id="@+id/follow_btn" style="@style/white_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/follow" /> <Button android:id="@+id/edit_profile_btn" style="@style/white_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/edit_profile" /> </ViewSwitcher> </RelativeLayout> <TextView android:id="@+id/dj_bio" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="-25dip" android:gravity="left|center_vertical" android:lineSpacingExtra="2dip" android:paddingLeft="10dip" android:paddingRight="10dip" android:textColor="@color/default_text" android:textSize="15sp" /> <include android:id="@+id/profile_tabs" layout="@layout/profile_tabs" /> </LinearLayout>
And profile_tabs ...
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" android:orientation="horizontal"> <include android:id="@+id/profile_mixes_button" layout="@layout/profile_tab" /> <include android:id="@+id/profile_followers_button" layout="@layout/profile_tab" /> <include android:id="@+id/profile_following_button" layout="@layout/profile_tab" /> </LinearLayout>
So, as you can see, this is a regular layout with three buttons that mimic the tabs.
Tab content is also dictated by ViewSwitcher:
<?xml version="1.0" encoding="utf-8"?> <ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/profile_view_switcher" android:layout_width="match_parent" android:layout_height="match_parent" android:inAnimation="@anim/fade_in_300" android:outAnimation="@anim/fade_out_300" android:background="@color/white"> <include android:id="@+id/profile_loading" layout="@layout/loading_view_full" /> <ListView android:id="@+id/profile_content_list" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:divider="@null" android:dividerHeight="0dip" android:fadingEdge="none" /> </ViewSwitcher>
This shows the boot wheel, and then switches to the list. There is no other scrollable ViewGroup.
And that’s basically it.
Now, if you want to scroll the WHOLE line, you need to use a custom adapter and set the above layout as a title (or at least use getItemType in the adapter in a smart way). Thus, the entire screen is a list (with all the optimizations available in the list).
We (ab) use this in the new 8tracks app under dev .;)