android--状态栏、标题栏、view的高度和宽度计算:

1.目的:总结获得状态栏--标题栏高度的方法

2.相关图解:(图片转自http://aichixihongshi.iteye.com/blog/1195543)

2.使用到的接口:

  • view.getWindowVisibleDisplayFrame(Rect rect):获得指定view对象的布局
  • getWindowManager().getDefaultDisplay();:获得Diplay对象,通过display.getWidth(), display.getHeight()获得屏幕分辨率
  • getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();:获得区域三的参数

3.相关代码:(部分代码参考自:http://www.aslibra.com/blog/post/android-getting-height-of-status-and-title-bar.php)

(1)布局代码:

View Code
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView
android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>

<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />

</FrameLayout>

(2)acitivity界面代码

View Code
package my.test.size;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.widget.ImageView;

public class ScreenAndViewSizeActivity extends Activity {
ImageView iv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

iv = (ImageView) this.findViewById(R.id.ImageView01);
iv.post(new Runnable()
{
public void run()
{
viewInited();
}
}
);
Log.v("test", "== ok ==");
}

private void viewInited(){
Rect rect= new Rect();
Window window= getWindow();
iv.getWindowVisibleDisplayFrame(rect);
int statusBarHeight= rect.top;
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;
//测试结果:ok之后 100多 ms 才运行了
Log.v("test", "=-init-= statusBarHeight="+statusBarHeight+
" contentViewTop="+contentViewTop+
" titleBarHeight="+titleBarHeight);
}

4.总结

(1)这个对本人来说是个经验积累

    刚开始调用这些接口的时候,得到的top=0;根本测不到状态栏的高度。在看了这段代码之后才明白我们需要在OnCreate完毕之后才能获得正确的数据。

(2)相关知识积累

  •     android3.2的Display.getHeight()获得的高度不包含状态栏的(没有验证,查资料浏览到的,以后用到了再验证)
  •     读英文文档很重要
  •         平时多做一些andorid小测试工具能提高开发效率



posted @ 2012-02-07 11:24  junqinghaha  阅读(1763)  评论(0编辑  收藏  举报