今天需要找关于找获得屏幕的高度的资料,现在整理一下记录在我的博客当中。
在获得宽度的时候是没有那么复杂的,只要在getwidth就可以了,但是要获得高度的话就会很麻烦,因为在当前的屏幕中,高度是分为很多部分的,入下图所示。
里面的各个部分的高度,我现在来一一说一下怎么在代码中获取。
先讲4.整个屏幕的高度的获取,下面是Java代码
String dpi=null;
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
method.invoke(display, dm);
dpi=dm.heightPixels+"";
}catch(Exception e){
e.printStackTrace();
}
Log.i("屏幕总高度",dpi);
其中的dm.heightPixels就是4.屏幕的总高度,获得1.状态栏的Java代码片如下
Rect outRect=new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
int statusBarHeight=outRect.top;
Log.i("状态栏高度",statusBarHeight+"");
statusBarHeight就是
1.状态栏的高度
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
Log.i("标题栏的高度",contentTop-statusBarHeight+"");
contentTop是包括状态栏和标题栏一起的高度,那么contentTop-statusBarHeight就是
2.标题栏的高度。
height=getWindowManager().getDefaultDisplay().getHeight();
Log.i("除去虚拟按键屏幕的高度",height+"");
int contentheight=getWindow().findViewById(Window.ID_ANDROID_CONTENT).getHeight();
Log.i("除去状态栏和标题栏的高度",contentheight+"");
上面两段代码都是获得
3.内容栏的代码,那么
5虚拟按键的高度就很好得知了,4-1-2-3就可以了。
获得控件的7.高度代码很简单的,只要getheight就可以了,就不单独写出来了,讲讲获得6.控件的Y坐标。
lv.getLocationInWindow(position);
int tv_yheight=position[1]
总代码贴在这里:JAVA
package com.jim.nineoldanim;
import java.lang.reflect.Method;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
int height=0;
int tv_height=0;
LinearLayout lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(LinearLayout) findViewById(R.id.lv);
}
@SuppressWarnings("deprecation")
public void click(View v){
String dpi=null;
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
method.invoke(display, dm);
dpi=dm.heightPixels+"";
}catch(Exception e){
e.printStackTrace();
}
Log.i("屏幕总高度",dpi);
int[] position = new int[2];
//view所在的Y坐标
lv.getLocationInWindow(position);
System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);
height=getWindowManager().getDefaultDisplay().getHeight();
Rect outRect=new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
int statusBarHeight=outRect.top;
Log.i("状态栏高度",statusBarHeight+"");
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
Log.i("标题栏的高度",contentTop-statusBarHeight+"");
int contentheight=getWindow().findViewById(Window.ID_ANDROID_CONTENT).getHeight();
Log.i("状态栏和标题栏的总高度",contentTop+"");
Log.i("除去状态栏和标题栏的高度",contentheight+"");
tv_height=lv.getHeight();
int tv_yheight=position[1]-contentTop+tv_height/2;
Log.i("Lv自身的高度",tv_height+"");
Log.i("Lv所在位置的高度",tv_yheight+"");
int hei=contentheight/2-tv_yheight;
Log.i("除去虚拟按键屏幕的高度",height+"");
Log.i("虚拟按键的高度",dm.heightPixels-height+"");
ObjectAnimator.ofFloat(lv, "translationY", 0,hei).setDuration(600).start();
}
}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.jim.nineoldanim.MainActivity" >
<LinearLayout
android:layout_width="80dp"
android:layout_height="80dp"
android:orientation="vertical"
android:background="#ffdd11"
android:id="@+id/lv"
android:layout_centerHorizontal="true">
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv"
android:layout_marginTop="110dp"
android:layout_toRightOf="@+id/tv"
android:text="Button"
android:onClick="click"/>
</RelativeLayout>
打包下载
原理的6.控件的Y坐标有点错误,应该是6+1+2的总长才是,修改一下。