1、一个控件在其父窗口中的坐标位置
View.getLocationInWindow(int[] location)
2、一个控件在其整个屏幕上的坐标位置
View.getLocationOnScreen(int[] location)
3、view.getLocationInWindow(location); //获取在当前窗口内的绝对坐标;view.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标。
4、getLocationInWindow,一个控件在其父窗口中的坐标位置;getLocationOnScreen,一个控件在其整个屏幕上的坐标位置。
5、getLocationOnScreen获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。
getLocationInWindow是以B为原点的C的坐标
getLocationOnScreen以A为原点。
下面是getLocationOnScreen示例
start = (Button) findViewById(R.id.start);
int []location=new int[2];
start.getLocationOnScreen(location);
int x=location[0];//获取当前位置的横坐标
int y=location[1];//获取当前位置的纵坐标
下面是getLocationInWindow示例
start = (Button) findViewById(R.id.start);
int []location=new int[2];
start.getLocationInWindow(location);
int x=location[0];//获取当前位置的横坐标
int y=location[1];//获取当前位置的纵坐标
1.获取状态栏高度:
decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。
于是,我们就可以算出状态栏的高度了。
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
2.获取标题栏高度:
getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
3.获得LinearLayout布局的高和宽
View view =getLayoutInflater().inflate(R.layout.main,null);
LinearLayout linearlayout =(LinearLayout)view.findViewById(R.id.linearlayout);
//measure的参数为0即可
linearlayout.measure(0,0);
//获取组件的宽度
int width=linearlayout.getMeasuredWidth();
//获取组件的高度
int height=linearlayout.getMeasuredHeight();
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
或者:
View rootView = findViewById(android.R.id.content);
或者:
View rootView = findViewById(android.R.id.content).getRootView();
window、Activity、DecorView、ViewRoot关系