Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make android action bar title center aligned?

I tried my own Custom Action bar for getting action bar title centered on the middle. It worked. However, after I added the options menu in Action bar, the title again shifted to the left. What should I do in order to get the title centered on the middle of the action bar? my code is:

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);    
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    View cView = getLayoutInflater().inflate(R.layout.custom_actionbar, null);
    actionBar.setCustomView(cView);

and my layout is

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/holo_blue_light"
android:orientation="vertical" >

<TextView
    android:id="@+id/apptitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_gravity="center_horizontal|center_vertical"
    android:gravity="center_horizontal|center_vertical"
    android:text="@string/app_name" />

like image 385
Anu Avatar asked Feb 14 '14 03:02

Anu


People also ask

How do I center my title on android?

suggest use android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" instead. To keep using default styles for the customised TextView, try something like style="@style/TextAppearance.

How do I change the title text bar in android?

First, add a font file in the src/main/assets/fonts/ of your project. Then create variables for Toolbar and text title and call the method findViewById(). Create a new Typeface from the specified font data. And at last setTypeface in text title.


2 Answers

I am sure, you are using the below to set your custom theme.

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
getSupportActionBar().setCustomView(R.layout.abs_layout);

If not, then please add the first line. And the text in your custom layout is centered. (Gravity = Center)

Also I found a similar link here and here. Hope this helps.

Try this out as well.

I was able to accomplish what I wanted by not showing the title of the activity, and instead using a customView as you suggested. The key that I missed for a while was you must use the setCustomView(View, ActionVar.LayoutParams) method in order to get the custom view centered, simply setting a layout_gravity="center" in the custom view layout file does not work. Here's a short code snippet showing how I got it to work:

            TextView customView = (TextView)
LayoutInflater.from(this).inflate(R.layout.actionbar_custom_title_view_centered,
null);
            ActionBar.LayoutParams params = new
ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);

            customView.setText("Some centered text");
            getSupportActionBar().setCustomView(customView, params);

This method is working for me on at least 3.2, 2.3, and 2.2 devices.

Source https://groups.google.com/forum/#!msg/actionbarsherlock/A9Ponma6KKI/Llsp41jWLEgJ

like image 87
Atul O Holic Avatar answered Sep 18 '22 13:09

Atul O Holic


First, create a .xml file like this: (action_bar.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:orientation="horizontal">

<TextView
    android:id="@+id/actionbar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:maxLines="1"
    android:clickable="false"
    android:focusable="false"
    android:longClickable="false"
    android:textStyle="bold"
    android:textSize="18sp"
    android:textColor="#000000" />

</LinearLayout>

And then, in your activity:

View view = getLayoutInflater().inflate(R.layout.action_bar, null);
    ActionBar.LayoutParams params = new ActionBar.LayoutParams(
            ActionBar.LayoutParams.WRAP_CONTENT,
            ActionBar.LayoutParams.MATCH_PARENT,
            Gravity.CENTER);

    TextView Title = (TextView) view.findViewById(R.id.actionbar_title);
    Title.setText("Your Title");

getSupportActionBar().setCustomView(view,params);       
getSupportActionBar().setDisplayShowCustomEnabled(true); //show custom title
getSupportActionBar().setDisplayShowTitleEnabled(false); //hide the default title

I've tried a lot of solutions and only this one works. Hope it helps you.

like image 43
Willy Chen Avatar answered Sep 20 '22 13:09

Willy Chen