Add custom view to the right of toolbar
Solution 1
You can add ViewGroups
inside Toolbar
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<RelativeLayout
....
</RelativeLayout>
</android.support.v7.widget.Toolbar>
Solution 2
I just set layout_gravity to the right
and it worked
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="?android:actionBarSize"
app:title="NEW REQUESTS"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="blahblah"
android:layout_gravity="right"
/>
</android.support.v7.widget.Toolbar>
Solution 3
Given answers work but if you want to set a title to the toolbar (most likely you will), then adding a RelativeLayout
pushes the title out of view to the right. In this case you need to disable the toolbar title by setting getSupportActionBar().setDisplayShowTitleEnabled(false)
and add a custom TextView next to the other view you wish to add to Toolbar.
So as an example you would add a ImageView
this way:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
android:id="@+id/base_activity_toolbar"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:minHeight="?attr/actionBarSize"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:id="@+id/custom_toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
style="@style/ActionBarTitle"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/custom_toolbar_title"
android:src="@drawable/arrow"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
Solution 4
Just had the same issue but I found a simpler (in my humble opinion) solution.
You can slightly change your code from :
LayoutInflater mInflater= LayoutInflater.from(context); View mCustomView = mInflater.inflate(R.layout.textview, null); toolbar.addView(mCustomView);
To :
LayoutInflater mInflater= LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.textview, null);
toolbar.addView(mCustomView, new Toolbar.LayoutParams(Gravity.RIGHT));
The view is then added with gravity set to the right !
Shubham
Updated on May 05, 2020Comments
-
Shubham about 4 years
I am trying to achieve this(A timer in
toolbar
with red background):I am trying to add
customView
intoolbar
. It always end's up being on extreme left just beside the back arrow. Like the textYP
in image below is a customTextview
added to toolbar..The code for
toolbar
:<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar android:id="@+id/base_activity_toolbar" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:elevation="4dp" android:minHeight="?attr/actionBarSize" android:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
The code for adding the layout:
LayoutInflater mInflater= LayoutInflater.from(context); View mCustomView = mInflater.inflate(R.layout.textview, null); toolbar.addView(mCustomView);
This is the layout I am adding right now for testing:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:gravity="end" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:text="yp" android:layout_height="wrap_content"/> </LinearLayout>
I am missing something majorly, could not figure out. Pulling my hairs out.