簡體   English   中英

中心使用android中的樣式在操作欄中對齊標題。

[英]Center Align title in action bar using styles in android.

嗨,我正在開發Android應用程序。 在我的應用程序中,我正在使用操作欄。 我想讓中心在動作欄中對齊我的窗口標題。 我知道可以使用xml文件。 但我想用風格來做它,以便它適用於我的每個窗口,如何做到這一點需要幫助。 謝謝。

在不使用actionBar的自定義布局的情況下使ActionBarTitle居中的簡單方法。

但在此之前,首先將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);
    }
}

我知道可以使用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);

如果你需要在每項活動中都有這個,你有兩個選擇:

  1. 蠻力方式:將上面一行代碼放在每個Activity的onCreate中。
  2. 擴展Activity並將ActionBar初始化代碼放在onCreate中。 然后為每個Activity擴展自定義Activity類。 只是不要忘記在每個Activity的onCreate()中調用super()。

不幸的是,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);
    }
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM