如何设置ActionBar标题居中

首先声明:该方法并不是绝对准确居中。。。

前提:
1、我不想自定义Dialog显示菜单,因此就不能隐掉ActionBar;
2、我不需要ActionBar显示左侧的图片;
3、我需要ActionBar居中显示Title;
4、我需要显示右侧的菜单按钮。

历程:
根据自己的需求,开始奋战于网络世界,各种不行,但是某篇技术Blog的内容给了我启发,那就是Title的id可以获取到!!!
可以获取到id又能怎样?那当然是设置各种属性啦!

效果:
如何设置ActionBar标题居中_第1张图片
前文已说明不是绝对居中,火眼金睛请蒙上。。。

代码:

// activity类里面的代码
private ActionBar actionBar;    //ActionBar 实例
private TextView tvTitle;   //TextView 实例(即Title)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 初始化ActionBar实例
    actionBar = getActionBar();

    // 设置不显示左侧图标
    actionBar.setDisplayShowHomeEnabled(false);

    // 重要内容,获取Title的id....
    // 关于id的定义,可见于SDK安装目录下的sdk\platforms\android-21\data\res\layout
    int titleId = Resources.getSystem().getIdentifier("action_bar_title",
            "id", "android");

    // 既然获取了id,那剩下的就发挥想象去涂鸦吧
    tvTitle = (TextView) findViewById(titleId);
    tvTitle.setTextColor(0xFFFFFFFF);
    tvTitle.setTextSize(25);

    // tvTitle.setBackgroundColor(0XFF00FF00);  // 设置背景,便于观察效果

    // 获取屏幕的相关尺寸,用以转换单位
    DisplayMetrics metric = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metric);
    float density = metric.density;
    int widthMax = metric.widthPixels;

    // 关键的一刀,设置宽度为屏幕宽度(但是实际显示并不是那样哈)
    tvTitle.setWidth(widthMax);

    // 既然这些都设置了,为啥不设置个padding什么的呢(控制文字位置)
    int paddingLeft = (int) (-16 * density);    // 控制左边距
    int paddingRight = (int) (-60 * density);   // 右边距(近似值)
    tvTitle.setPadding(paddingLeft, 0, paddingRight, 0);

    // 设置文字居中(因为设置了padding,显示的时候会以padding后的尺寸为准居中显示)
    tvTitle.setGravity(Gravity.CENTER);
    actionBar.setTitle("检测更新");

    setContentView(R.layout.activity_function);

}

疑问:
1、为啥要设置Title的TextView为最大宽度?
2、为啥设置左右padding分别为-16dp和-60dp?

解惑:
1、设置Title的TextView为屏幕最大宽度,只是为了使其尽可能的占用屏幕空间(便于后面的padding属性设置);
2、-16dp和-60dp这两个数值是估算值,具体如下:

我在布局文件中添加了两个红色的View,分别居左和居右(用来估测padding数值),如下图,因为google的风格(4dp、8dp、16dp、48dp…),我估计左侧为16dp,右侧为64dp,设置后,发现左侧的值刚好,但右侧的却有偏差,我改为56dp,匹配了,但是在pad上运行时发现64dp更合适,所以最终折中选择了60dp。
如何设置ActionBar标题居中_第2张图片

注:
并不是所有设备都支持这样,我测试了4.2和4.4的正常显示,4.0的则不正常(右侧的Menu按钮没了,具体原因没有深究。。。)

第一次写Blog,完全是在折腾~@@@@@@~

你可能感兴趣的:(Android)