在Activity类中使用窗口?

时间:2013-01-05 08:25:30

标签: android android-activity window statusbar titlebar

之前,我看到此代码段找到Height of statusbar?(and also Tiltebar) here

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int TitleBarHeight= contentViewTop - StatusBarHeight;

昨天,我尝试在AsyncTask类中使用此代码段。因此,我将活动的实例发送到活动的AsyncTask中的onCreate课程:

LongOperation loper = new LongOperation(this, vg, vArray, hintsArray,x_positionArray, y_positionArray);//Here `this` refers to current Activity
loper.execute("YES");

在AsynkTask类的doInBackground中,我只做了:

Thread.sleep(3000); 

onPostExecute方法中我复制上面的代码以计算状态栏和标题栏的高度。但是应用程序崩溃了,没有任何有用的logcat日志。然后我评论了一些这样的行:

Rect rectgle = new Rect();
    Window window = activity.getWindow();
//  window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
//  int StatusBarHeight= rectgle.top;
    contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT)
            .getTop();
//  int TitleBarHeight= contentViewTop - StatusBarHeight;

和App工作正常。所以似乎

  

window.getDecorView()getWindowVisibleDisplayFrame(rectgle);

导致应用程序崩溃,但我不知道为什么?我做错了什么?

1 个答案:

答案 0 :(得分:0)

好吧,如果您在Android 2.3.3中运行您的应用程序,那么可能会发生应用程序崩溃。因为此方法有点破碎。所以this解决方案可能对您有所帮助。

希望这会有所帮助:)