Android 开发ToolBar组件默认是居左显示,根据需求,大多需要居中显示。网上大多的做法是添加一个TextView,将源标题设置为空,再设置添加的TextView格式居中。这样可以达到目的,但源标题组件其实还是存在的,其实跟一跟源码就能找到实现方式,先上干货,再做讲解:

干货

toolbar=parentView.findViewById(R.id.toolbar);//获取组件

toolbar.setBackgroundColor(getResources().getColor(R.color.colorHead));//根据需求设置颜色

toolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite));//根据需求设置颜色

toolbar.setTitle("主标题");//ToolBar中 index=0

toolbar.setSubtitle("副标题");//ToolBar中 index=1

TextView textView = (TextView)toolbar.getChildAt(0);//主标题

textView.getLayoutParams().width = LinearLayout.LayoutParams.MATCH_PARENT;//填充父类

textView.setGravity(Gravity.CENTER_HORIZONTAL);//水平居中,CENTER,即水平也垂直,自选

TextView textView1 = (TextView)toolbar.getChildAt(1);//副标题

textView1.getLayoutParams().width = LinearLayout.LayoutParams.MATCH_PARENT;

textView1.setGravity(Gravity.CENTER_HORIZONTAL);

思路

获取原始组件,动态更改布局。鄙人是通过断点调试跟代码找到的方法的,进入ToolBar源码,其两个方法:

主标题:setTitle()

初始化的时候回去new一个AppCompatTextView对象,(其继承自TextView,所以代码中我直接用TextView接收),有图为证:

e2ba819f2df3

副标题:setSubtitle()

同样,设置的时候回去new一个AppCompatTextView对象,赋值加入ToolBar的布局中,有图为证:

e2ba819f2df3

既然底层是TextView,那我们完全可以拿到它再对其布局进行动态更改不就行啦。ToolBar提供一个获取子视图的方法:getChildAt(int index)。依次第一个为主标题,第二个为副标题,拿到后将其布局设置成:

textView.getLayoutParams().width = LinearLayout.LayoutParams.MATCH_PARENT;

textView.setGravity(Gravity.CENTER_HORIZONTAL);

其实等同于在XML中布局设置:

android:layout_width="match_parent"

android:gravity="center_horizontal"

后记:

1、如有不对请指教。

2、因为看到网上很多都是新增一个TextView的方式来实现,个人感觉没必要。

3、根据个人需求,选择实现方式,此处只做抛砖引玉。

4、注意:该居中建立在左侧和右侧对称的情况下,否则看起来就不那么对称。即如果左侧有个返回按钮,那右侧可以根据需求添加一个图标

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐