Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set android TabLayout in the bottom of the screen?

My question is how I can set the new android material design TabLayout to be in the bottom of the screen, kind of like Instagram's bottom toolbar.

If you have never seen Instagram's UI here is a screenshot of it :

If you have never seen Instagram's UI here is a screenshot of it. If there is a better way of approaching this, please feel free to post it here (with a code example if possible), I will greatly appreciate it.

Here is my code: activity_main.xml

<android.support.design.widget.AppBarLayout     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">      <android.support.v7.widget.Toolbar         android:id="@+id/toolbar"         android:layout_width="match_parent"         android:layout_height="?attr/actionBarSize"         android:background="?attr/colorPrimary"         app:layout_scrollFlags="scroll|enterAlways"         app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />      <android.support.design.widget.TabLayout         android:id="@+id/tabs"         android:layout_width="match_parent"         android:layout_height="wrap_content"         app:tabMode="fixed"         app:tabGravity="fill"/> </android.support.design.widget.AppBarLayout>  <android.support.v4.view.ViewPager     android:id="@+id/viewpager"     android:layout_width="match_parent"     android:layout_height="match_parent"     app:layout_behavior="@string/appbar_scrolling_view_behavior"  /> 

I have tried many methods and workarounds suggested by the Stack Overflow community, but none seems to work with this new implementation of tabs in android. I know this UI design does not follow android design guidelines, so please don't comment on it. This UI design is vital to my application's UX and I would appreciate getting an answer for it. Thank you!

like image 224
JorgeC Avatar asked Oct 28 '15 00:10

JorgeC


2 Answers

I believe I have the best simple fix. Use a LinearLayout and set the height of the viewpager to be 0dp with a layout_weight="1". Make sure the LinearLayout has an orientation of vertical and that the viewpager comes before the TabLayout. Here is what mines looks like:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity"     android:orientation="vertical">      <include layout="@layout/toolbar" android:id="@+id/main_toolbar"/>      <android.support.v4.view.ViewPager         android:id="@+id/viewpager"         android:layout_width="match_parent"         android:layout_height="0dp"         android:layout_weight="1"         android:background="@color/white"/>      <android.support.design.widget.TabLayout         android:id="@+id/sliding_tabs"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="@color/blue"         />  </LinearLayout> 

And as a bonus, you should create your toolbar only once as toolbar.xml. So that way all you have to do is used the include tag. Makes your layout's more clean. Enjoy!

toolbar.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="?attr/colorPrimary"     android:minHeight="?attr/actionBarSize"     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

Update 11.2.2016: For those of you who don't know how to inflate the toolbar, here is how. Make sure that your Activity extends AppCompatActivity so you can call setSupportActionBar() and getSupportActionBar().

Toolbar mToolbar = (Toolbar) findViewById(R.id.main_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
like image 108
ChallengeAccepted Avatar answered Sep 17 '22 19:09

ChallengeAccepted


I suggest to use androidx library as android support libraries may get deprecated soon.

We can actually add a tab layout to a viewpager. Below is the code snippet that I used in my project

<androidx.viewpager.widget.ViewPager     android:id="@+id/viewPager"     android:layout_width="match_parent"     android:layout_height="match_parent">      <com.google.android.material.tabs.TabLayout         android:id="@+id/tabLayout"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="#00a294"         android:layout_gravity="bottom" />  </androidx.viewpager.widget.ViewPager> 

layout_gravity="bottom" is the syntax that puts the tab layout to the bottom

like image 26
praveen Avatar answered Sep 16 '22 19:09

praveen