web-dev-qa-db-ja.com

Androidのスタイルを使用して、アクションバーのタイトルを中央揃えにします。

やあ、私は開発中ですAndroidアプリケーション。私のアプリケーションでは、アクションバーを使用しています。私はすべてのウィンドウに適用できるようにスタイルを使用してそれを行いたいのですが、これを行う方法は助けが必要です。

16
nilkash

私はそれがXMLファイルを使用して可能であることを知っています。しかし、私はすべてのウィンドウに適用できるようにスタイルを使用してそれを行いたいのですが、これを行う方法は助けが必要です。

これを行うにはまだxmlを使用します。単一のアクティビティだけでなく、スタイルアプリケーション全体に適用してください。完全な説明については、Androidのドキュメントを参照してください。

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

次に、テーマをアプリ全体または個々のアクティビティに適用します。

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

EDIT:以下は、タイトルのセンタリングを処理する方法です。

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つの選択肢があります。

  1. 総当たり的な方法:上記のコード行をすべてのアクティビティのonCreateに配置します。
  2. アクティビティを拡張し、onCreateにActionBar初期化コードを配置します。次に、アクティビティごとにカスタムアクティビティクラスを拡張します。各アクティビティのonCreate()でsuper()を呼び出すことを忘れないでください。
9
SBerg413

ActionBarのカスタムレイアウトを使用せずにActionBarタイトルを中央に配置する簡単な方法。

しかし、その前に最初にIconを隠す:

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

残念ながら、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
Bazanov Aleksey

@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);
3
Karlo Medallo