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接收),有图为证:
副标题:setSubtitle()
同样,设置的时候回去new一个AppCompatTextView对象,赋值加入ToolBar的布局中,有图为证:
既然底层是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、注意:该居中建立在左侧和右侧对称的情况下,否则看起来就不那么对称。即如果左侧有个返回按钮,那右侧可以根据需求添加一个图标
网友评论