16

您好我正在开发安卓应用程序。在我的应用程序中,我正在使用操作栏。我想在操作栏中使我的窗口标题居中对齐。我知道可以使用 xml 文件。但我想使用样式来做到这一点,以便它适用于我的每个窗口,如何做到这一点需要帮助。谢谢你。

4

4 回答 4

30

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);
    }
}
于 2014-06-20T10:08:10.947 回答
9

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().
于 2013-10-08T09:59:56.690 回答
5

不幸的是,SBerg413 的方式对我不起作用。

我的自定义布局是

<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>

所有作品都很完美:
http://i.stack.imgur.com/MvQgj.png

UPD:我将这个活动作为我所有活动的家长使用,应该有操作栏。

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);
    }
}
于 2014-10-06T20:01:52.157 回答
3

@Napolean 的回答帮助了我,但就我而言,我使用的是 Xamarin android (monodroid)。以下是他的 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);
于 2014-12-04T08:23:44.833 回答