如何设置ActionBar标题居中

来源:互联网 发布:wind数据库一年多少钱 编辑:程序博客网 时间:2024/05/07 03:31

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

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

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

效果:
效果图
前文已说明不是绝对居中,火眼金睛请蒙上。。。

代码:

// activity类里面的代码private ActionBar actionBar;    //ActionBar 实例private TextView tvTitle;   //TextView 实例(即Title)@Overrideprotected 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。
布局

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

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

2 0
原创粉丝点击