android 获得ToolBar中title的间距以及获得控件宽高
2017-01-04 15:33
344 查看
效果图有个需求,要让ToolBar下方的控件与Title左对齐,这样就要得到Title距离左边屏幕的距离,然后在程序中设置setMargins,问题在于,ToolBar中没有获取Title间距的方法,至少我没找到,后来领导给了个解决方法,记录一下
代码贴一下
在oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件布局要在onResume回调后完成。所以需要使用getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
参考资料
Android View中getViewTreeObserver().addOnGlobalLayoutListener()
关于Android中的ViewTreeObserver
Android获取view高度的三种方式
代码贴一下
toolbar.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); /** * OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时, * 可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer), * 在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化, * 而是通过getViewTreeObserver()获得 */ private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { /** * interfaceViewTreeObserver.OnGlobalLayoutListener 当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类 */ @Override public void onGlobalLayout() { int count = toolbar.getChildCount(); View view = null; TextView titleView = null; /** * 遍历toolbar的子组件,找到符合条件的Title */ for (int i = 0; i < count; i++) { view = toolbar.getChildAt(i); if (view instanceof TextView) { if (toolbar.getTitle() != null && toolbar.getTitle().equals(((TextView) view).getText().toString())) { titleView = (TextView) view; break; } } } if (titleView != null) { /** * 设置infoLayout的左边Margin与ToolBar的title控件的X值一致,保持与Title左对齐 */ LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) infoLayout.getLayoutParams(); layoutParams.setMargins((int)titleView.getX(), 0, 0, 0); infoLayout.setLayoutParams(layoutParams); infoLayout.invalidate(); } /** * OnGlobalLayoutListener可能会被多次触发, * 要将OnGlobalLayoutListener注销掉。 */ toolbar.getViewTreeObserver().removeGlobalOnLayoutListener(this); } };
在oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件布局要在onResume回调后完成。所以需要使用getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
参考资料
Android View中getViewTreeObserver().addOnGlobalLayoutListener()
关于Android中的ViewTreeObserver
Android获取view高度的三种方式
相关文章推荐
- Android获得标题栏和状态栏高度,以及立即获取控件的高度
- 【React Native开发】React Native控件之ToolbarAndroid工具栏控件讲解以及使用(15)
- Android获得标题栏和状态栏高度,以及立即获取控件的高度
- android开发之自定义TextView设置字间距以及通过TextView控件属性设置行间距
- React Native控件之ToolbarAndroid工具栏控件讲解以及使用
- Android控件系列之Button以及Android监听器
- Android如何获得系统(system)权限以及MM命令模块介绍
- android模拟器分辨率设置以及获得模拟器分辨率代码片段
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- Android ——ListView以及scrollView下拉刷新控件的实现
- Activity设置全屏以及Android获得屏幕的宽和高
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android 传感器实例 以及 自定义可复用控件的使用
- android中设置控件获得焦点
- android获得控件在屏幕中的绝对坐标
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android: 静态XML和动态加载XML混合使用,以及重写Layout控件
- 布局中文件中【控件间距参数详解以及单位选择】