android 获得ToolBar中title的间距以及获得控件宽高
来源:互联网 发布:行业精英知乎 编辑:程序博客网 时间:2024/04/29 01:46
效果图有个需求,要让ToolBar下方的控件与Title左对齐,这样就要得到Title距离左边屏幕的距离,然后在程序中设置setMargins,问题在于,ToolBar中没有获取Title间距的方法,至少我没找到,后来领导给了个解决方法,记录一下
代码贴一下
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高度的三种方式
0 0
- android 获得ToolBar中title的间距以及获得控件宽高
- Android获得控件的宽高
- 获得Android控件的真实宽高:
- android 初始化时获得控件位置,宽高的属性
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
- android获得屏幕宽高和控件宽高
- Android中获得屏幕宽高的实用方法
- Android中如何获得控件的尺寸
- Android获得屏幕宽高的方法
- Android获得图片宽高的方法
- Android中正确获得View控件的宽和高——使用篇
- SecureCRT + lrz 串口传输文件
- 他日若能阅此文,跨站登录不求人
- Linux查看磁盘空间及文件大小命令
- css变量使用
- android studio 中去除应用标题栏
- android 获得ToolBar中title的间距以及获得控件宽高
- Learning to Rank 简介
- github删除仓库
- 使用SwiftyJSON解析JSON
- SHOW_SPACE
- linux下ls命令的编写
- Logstash,Fluentd, Logtail比较
- C语言中的static和extern
- VS2012 opencv2.4.13+MFC打开一张指定位置的图片