Center Align title in action bar using styles in android.

前端 未结 4 522
再見小時候
再見小時候 2020-11-29 06:41

Hi I am developing android application. In my application I am using action bar. I want to make center align my title of window in action-bar. I know it is possible using xm

相关标签:
4条回答
  • 2020-11-29 07:25

    I know it is possible using xml files. but I want to do it using style so that it will applicable for my every window, how to do this need help.

    You still use xml to do this. Just apply the style application wide and not just to a single activity. Please see the android documentation for a complete description:

    https://developer.android.com/training/basics/actionbar/styling.html

    Then apply your theme to your entire app or individual activities:

    <application android:theme="@style/CustomActionBarTheme" ... />
    

    EDIT: Here's how you'll have to handle the centering of the the title:

    In your action_bar.xml you'll have something like this:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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_centerHorizontal="true"
        android:text="SOME TITLE"
        android:textSize="18sp" />
    </RelativeLayout>
    

    Then in your onCreate() you'll have something like:

    getSupportActionBar().setCustomView(R.layout.action_bar);
    

    If you need to have this in every activity, you have 2 choices:

    1. The brute force way: Put the above line of code in every Activity's onCreate.
    2. Extend Activity and put your ActionBar initialization code in the onCreate. Then Extend your custom Activity class for each Activity. Just don't forget to call the super() in each Activity's onCreate().
    0 讨论(0)
  • 2020-11-29 07:25

    Simple method to center ActionBarTitle without using custom layout for actionBar.

    But before that first hide up Icon as :

    myActionBar.setIcon(new ColorDrawable(Color.TRANSPARENT));
    
    private void centerActionBarTitle() {
        int titleId = 0;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            titleId = getResources().getIdentifier("action_bar_title", "id", "android");
        } else {
            // This is the id is from your app's generated R class when 
            // ActionBarActivity is used for SupportActionBar
            titleId = R.id.action_bar_title;
        }
    
        // Final check for non-zero invalid id
        if (titleId > 0) {
            TextView titleTextView = (TextView) findViewById(titleId);
            DisplayMetrics metrics = getResources().getDisplayMetrics();
    
            // Fetch layout parameters of titleTextView 
            // (LinearLayout.LayoutParams : Info from HierarchyViewer)
            LinearLayout.LayoutParams txvPars = (LayoutParams) titleTextView.getLayoutParams();
            txvPars.gravity = Gravity.CENTER_HORIZONTAL;
            txvPars.width = metrics.widthPixels;
            titleTextView.setLayoutParams(txvPars);
            titleTextView.setGravity(Gravity.CENTER);
        }
    }
    
    0 讨论(0)
  • 2020-11-29 07:30

    @Napolean's answer helped me, but in my case I am using Xamarin android (monodroid). Here's the translation of his code in C#:

    var titleId = Resources.GetIdentifier("action_bar_title", "id", "android");
    var titleTextView = FindViewById<TextView>(titleId);
    var layoutParams = (LinearLayout.LayoutParams) titleTextView.LayoutParameters;
    layoutParams.Gravity = GravityFlags.CenterHorizontal;
    layoutParams.Width = Resources.DisplayMetrics.WidthPixels;
    titleTextView.LayoutParameters = layoutParams;
    titleTextView.Gravity = GravityFlags.Center;
    //Added padding because it is slightly off centered.
    titleTextView.SetPadding(100, 0,0,0);
    
    0 讨论(0)
  • 2020-11-29 07:38

    Unfortunally, SBerg413's way doesn't work for me.

    my custom layout is

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/custom_action_bar_title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="test"
            android:textColor="@color/action_bar_title_color"
            android:textSize="@dimen/action_bar_title_size" />
    </RelativeLayout>
    

    And all works perfect:

    UPD: this activity i use like a parent for all my activities, that should have the action bar.

    public class ActionBarCustomizationActivity extends ActionBarActivity
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            this.getSupportActionBar().setDisplayShowCustomEnabled(true);
    
            LayoutInflater inflater = LayoutInflater.from(this);
            View v = inflater.inflate(R.layout.custom_action_bar, null);
    
            TextView titleTextView = (TextView) v.findViewById(R.id.custom_action_bar_title);
            titleTextView.setText(this.getTitle());
            titleTextView.setTypeface(App.getInstance().getActionBarTypeFace());
    
            this.getSupportActionBar().setCustomView(v);
        }
    }
    
    0 讨论(0)
提交回复
热议问题