获取View类界面控件的位置,有助于添加新的控件。


  • 获取在parent里的相对坐标位置

这个比较简单,不用多说,直接调用View的方法:getLeft,getTop,getBottom,getRight获得。

  • 取在屏幕中的绝对位置
  1. getLocalVisibleRect
  2. getGlobalVisibleRect
  3. getLocationOnScreen
  4. getLocationInWindow

有一遍写得不错的文章,转帖如下:(原文地址:http://www.fengfly.com/plus/view-209439-1.html)

=======================================================================

我们重点在获取view的y坐标,你懂的...

依次介绍以下四个方法:

1.getLocationInWindow

  
  1. int[]position=newint[2];

  2. textview.getLocationInWindow(position);

  3. System.out.println("getLocationInWindow:"+position[0]+","+position[1]);

  

这个方法是将view的左上角坐标存入数组中.此坐标是相对当前activity而言.

若是普通activity,则y坐标为可见的状态栏高度+可见的标题栏高度+view左上角到标题栏底部的距离.

可见的意思是:在隐藏了状态栏/标题栏的情况下,它们的高度以0计算.

若是对话框式的activity,则y坐标为可见的标题栏高度+view到标题栏底部的距离.

此时是无视状态栏的有无的.

2.getLocationOnScreen

  
  1. int[]position=newint[2];

  2. textview.getLocationOnScreen(position);

  3. System.out.println("getLocationOnScreen:"+position[0]+","+position[1]);

  

这个方法跟上面的差不多,也是将view的左上角坐标存入数组中.但此坐标是相对整个屏幕而言.

y坐标为view左上角到屏幕顶部的距离.

3.getGlobalVisibleRect

  
  1. RectviewRect=newRect();

  2. textview.getGlobalVisibleRect(viewRect);

  3. System.out.println(viewRect);

  

这个方法是构建一个Rect用来"套"这个view.此Rect的坐标是相对当前activity而言.

若是普通activity,则Rect的top为可见的状态栏高度+可见的标题栏高度+Rect左上角到标题栏底部的距离.

若是对话框式的activity,则y坐标为Rect的top为可见的标题栏高度+Rect左上角到标题栏底部的距离.

此时是无视状态栏的有无的.

4.getLocalVisibleRect

  
  1. RectglobeRect=newRect();

  2. button.getLocalVisibleRect(globeRect);

  



注意:

以上方法在OnCreate方法中调用,都会返回0,这是因为View还未加载完毕.

建议在onWindowFocusChanged方法中进行获取,有些情况下onWindowFocusChanged不好用的时候(比如ActivityGroup),可以这样写:

  
  1. mTextView.post(newRunnable(){

  2. @Override

  3. publicvoidrun(){

  4. RectviewRect=newRect();

  5. mTextView.getLocalVisibleRect(viewRect);

  6. mTreeScrollView.setRect(viewRect);

  7. }

  8. });

  

这样在View加载完毕之后会执行获取位置的方法.

=======================================================================


PS:如何动态创建一个View类控件:

1、通过new方法来创建一个界面对象;

2、通过Layout xml资源来创建,利用LayoutInflater提供的方法。

更多相关文章

  1. Android用于提示等待的ProgressDialog
  2. android 设置全屏方法1
  3. Android(安卓)4.0 隐藏虚拟按键(导航栏)的方法
  4. Android画布(cavas)
  5. SpringMVC+Volley实现Android端上传文件
  6. Android(安卓)Studio 常用快捷键
  7. Android(安卓)获取控件的高度或者宽度的方法
  8. Android数据存储技术
  9. Android(安卓)XmlSerializer 换行

随机推荐

  1. android切换屏幕时的生命周期
  2. 某技术大牛的帖子(android项目总结)
  3. 常见Android Native崩溃及错误原因
  4. Forge模型转换和网页浏览在Android上的实
  5. Android 自定义AlignTextView 完美解决原
  6. 近百个Android开发教程和资料收集整理打
  7. 基于Google Map API的android地图开发
  8. 转:RTC搭建android下三层应用程序访问服务
  9. 横竖屏切换时候activity的生命周期?
  10. Android Preference使用