中心使用android中的样式在操作栏中对齐标题.

nil*_*ash 16 android title center-align android-actionbar

嗨,我正在开发Android应用程序.在我的应用程序中,我正在使用操作栏.我想让中心在动作栏中对齐我的窗口标题.我知道可以使用xml文件.但我想用风格来做它,以便它适用于我的每个窗口,如何做到这一点需要帮助.谢谢.

Nap*_*ean 29

在不使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以工作,但如果ActionBar有MenuItems,标题会向左移动一些像素. (3认同)
  • 我应该在哪里调用这种方法?我打电话给onCreate,作为最后一条指令,我正在崩溃 (3认同)
  • 使用action_bar_subtitle重复相同操作也会使Action Bar字幕居中. (2认同)
  • 这对我来说似乎不起作用.我一直为titleTextView获取null.我尝试在onCreate,onResume中调用此方法,甚至创建了一个UI按钮来触发此方法,但它们最终都是相同的.我究竟做错了什么? (2认同)

SBe*_*413 9

我知道可以使用xml文件.但我想用风格来做它,以便它适用于我的每个窗口,如何做到这一点需要帮助.

您仍然使用xml来执行此操作.只需将样式应用程序广泛应用于单个活动.有关完整说明,请参阅android文档:

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

然后将您的主题应用于整个应用或个人活动:

<application android:theme="@style/CustomActionBarTheme" ... />
Run Code Online (Sandbox Code Playgroud)

编辑:这是你将如何处理标题的中心:

在你的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>
Run Code Online (Sandbox Code Playgroud)

然后在你的onCreate()你会有类似的东西:

getSupportActionBar().setCustomView(R.layout.action_bar);
Run Code Online (Sandbox Code Playgroud)

如果你需要在每项活动中都有这个,你有两个选择:

  1. 蛮力方式:将上面一行代码放在每个Activity的onCreate中.
  2. 扩展Activity并将ActionBar初始化代码放在onCreate中.然后为每个Activity扩展自定义Activity类.只是不要忘记在每个Activity的onCreate()中调用super().


小智 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>
Run Code Online (Sandbox Code Playgroud)

一切都完美无缺:
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);
    }
}
Run Code Online (Sandbox Code Playgroud)