How to align title at center of ActionBar in default theme(Theme.Holo.Light)
You can create a custom layout and apply it to the actionBar.
To do so, follow those 2 simple steps:
Java Code
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);getSupportActionBar().setCustomView(R.layout.actionbar);
Where R.layout.actionbar
is the following layout.
XML
<?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:layout_gravity="center" android:orientation="vertical"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/action_bar_title" android:text="YOUR ACTIVITY TITLE" android:textColor="#ffffff" android:textSize="24sp" /></LinearLayout>
It can be as complex as you want. Try it out!
EDIT:
To set the background
you can use the property android:background
in the container layout (LinearLayout in that case). You may need to set the layout height android:layout_height
to match_parent
instead of wrap_content
.
Moreover, you can also add a LOGO / ICON to it. To do so, simply add an ImageView inside your layout, and set layout orientation property android:orientation
to horizontal (or simply use a RelativeLayout and manage it by yourself).
To change the title of above custom action bar dynamically, do this:
TextView title=(TextView)findViewById(getResources().getIdentifier("action_bar_title", "id", getPackageName()));title.setText("Your Text Here");
It seems there is no way to do this without custom view. You can get the title view:
View decor = getWindow().getDecorView();TextView title = (TextView) decor.findViewById(getResources().getIdentifier("action_bar_title", "id", "android"));
But changing of gravity
or layout_gravity
doesn't have an effect. The problem in the ActionBarView
, which layout its children by itself so changing of layout params of its children also doesn't have an effect.To see this excecute following code:
ViewGroup actionBar = (ViewGroup) decor.findViewById(getResources().getIdentifier("action_bar", "id", "android"));View v = actionBar.getChildAt(0);ActionBar.LayoutParams p = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);p.gravity= Gravity.CENTER;v.setLayoutParams(p);v.setBackgroundColor(Color.BLACK);
Check out new Tool bar on support library class in Lollipop update you can design actionbar by adding toolbar in your layout
add these items in your app theme
<item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item>
Create your toolbar in a layout and include your textview in center design your toolbar
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/acbarcolor"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/app_name" android:textColor="#ffffff" android:textStyle="bold" /> </RelativeLayout></android.support.v7.widget.Toolbar>
add your action bar as tool bar
toolbar = (Toolbar) findViewById(R.id.toolbar);if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);}
please ensure that you need to include toolbar on your resource file like this
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <include android:layout_width="match_parent" android:layout_height="wrap_content" layout="@layout/toolbar" /> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Framelayout to display Fragments --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/homepageinc" /> </FrameLayout> <fragment android:id="@+id/fragment1" android:layout_gravity="start" android:name="com.shouldeye.homepages.HomeFragment" android:layout_width="250dp" android:layout_height="match_parent" /> </android.support.v4.widget.DrawerLayout></LinearLayout>