Центр Выровнять название в панели действий, используя стили в android.

Привет, Я разрабатываю приложение для Android. В моем приложении я использую панель действий. Я хочу, чтобы центр выравнивал мой заголовок окна в панели действий. Я знаю, что это возможно с помощью xml файлов. но я хочу сделать это с помощью стиля, чтобы он применим для каждого окна, как это сделать. Спасибо.

Ответ 1

Я знаю, что это возможно с помощью xml файлов. но я хочу сделать это, используя стиль так что это применимо для каждого моего окна, как это сделать помощь.

Вы все еще используете xml для этого. Просто примените приложение стиля широко, а не только к одному действию. Пожалуйста, ознакомьтесь с документацией по Android для полного описания:

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

Затем примените свою тему для всего приложения или отдельных действий:

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

РЕДАКТИРОВАТЬ: Вот как вам придется обрабатывать центрирование заголовка:

В вашем action_bar.xml у вас будет что-то вроде этого:

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

Затем в вашем onCreate() у вас будет что-то вроде:

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

Если вам нужно иметь это в каждом действии, у вас есть 2 варианта:

  • Способ перебора: поместите вышеприведенную строку кода в каждое действие onCreate.
  • Расширьте действие и поместите код инициализации ActionBar в onCreate. Затем расширьте свой собственный класс активности для каждого действия. Просто не забудьте вызвать super() в каждом действии onCreate().

Ответ 2

Простой метод центрирования ActionBarTitle без использования пользовательского макета для actionBar.

Но перед этим сначала скройте значок как:

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 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);
    }
}

Ответ 3

К сожалению, 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);
    }
}

Ответ 4

@Ответ Наполеона помог мне, но в моем случае я использую ансамбль Xamarin (monodroid). Здесь перевод его кода в С#:

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